设计模式是软件工程中解决常见问题的经典方案结晶。本文将深入讲解6种最常用的Java设计模式,通过代码实例解析其实现原理,并探讨适用场景和实际应用价值。
一、单例模式(Singleton Pattern)
结构特点:
-
私有化构造函数
-
静态私有实例变量
-
静态公有获取方法
java
复制
public class ConfigManager { private static volatile ConfigManager instance; private ConfigManager() {} public static ConfigManager getInstance() { if (instance == null) { synchronized (ConfigManager.class) { if (instance == null) { instance = new ConfigManager(); } } } return instance; } }
应用场景:
-
全局配置管理
-
数据库连接池
-
日志记录器
优势:
-
严格实例数量控制
-
全局访问点统一管理
-
减少资源重复消耗
二、工厂方法模式(Factory Method)
类结构:
复制
Creator │ ┌───────┴───────┐ ConcreteCreatorA ConcreteCreatorB
代码实现:
java
复制
interface Logger { void log(String message); } class FileLogger implements Logger { public void log(String message) { System.out.println("File: " + message); } } class LoggerFactory { public static Logger getLogger(String type) { if ("file".equals(type)) { return new FileLogger(); } return new ConsoleLogger(); } }
适用场景:
-
对象创建逻辑复杂
-
需要支持多种产品类型
-
系统需要良好扩展性
优势:
-
创建逻辑集中管理
-
客户端与具体实现解耦
-
符合开闭原则
三、观察者模式(Observer Pattern)
实现机制:
java
复制
class NewsPublisher { private List<Subscriber> subscribers = new ArrayList<>(); public void subscribe(Subscriber s) { subscribers.add(s); } public void notify(String news) { subscribers.forEach(s -> s.update(news)); } } interface Subscriber { void update(String news); }
典型应用:
-
事件驱动系统
-
实时数据监控
-
GUI事件处理
核心价值:
-
松耦合的交互方式
-
支持动态订阅机制
-
可扩展的观察者数量
四、装饰器模式(Decorator Pattern)
实现示例:
java
复制
abstract class Coffee { abstract double cost(); } class MilkDecorator extends Coffee { private Coffee coffee; public MilkDecorator(Coffee coffee) { this.coffee = coffee; } public double cost() { return coffee.cost() + 2.5; } }
应用案例:
-
Java IO流体系
-
动态添加对象功能
-
多层校验系统
优势对比:
方式 | 扩展性 | 灵活性 | 类数量 |
---|---|---|---|
继承 | 低 | 差 | 多 |
装饰器模式 | 高 | 优 | 少 |
五、策略模式(Strategy Pattern)
支付场景实现:
java
复制
interface PaymentStrategy { void pay(double amount); } class CreditCardPayment implements PaymentStrategy { public void pay(double amount) { System.out.println("信用卡支付:" + amount); } } class PaymentContext { private PaymentStrategy strategy; public void executePayment(double amount) { strategy.pay(amount); } }
适用情况:
-
多种算法变体
-
需要运行时切换策略
-
避免多重条件判断
优势体现:
-
算法独立演化
-
提升代码可维护性
-
符合单一职责原则
六、适配器模式(Adapter Pattern)
设备兼容方案:
java
复制
interface NewSDCard { void readData(); } class LegacySDAdapter implements NewSDCard { private LegacySDCard legacyCard; public void readData() { legacyCard.legacyRead(); } }
应用领域:
-
系统兼容性改造
-
第三方库集成
-
接口版本过渡
核心价值:
-
解决接口不兼容问题
-
复用现有类功能
-
降低系统改造成本
模式选择指南
-
创建型需求:优先考虑工厂/单例
-
行为扩展:装饰器/策略更合适
-
接口转换:适配器为首选方案
-
状态通知:观察者模式最佳
"知道这些模式存在很重要,但更重要的是知道何时不该使用它们。" —— Joshua Bloch
结语
设计模式体现了面向对象设计的精髓,但切忌模式滥用。建议开发者:
-
深入理解模式原理而非简单套用
-
优先考虑代码可读性和简洁性
-
在重构过程中逐步优化设计
-
结合具体业务场景灵活运用
掌握设计模式的本质是培养良好的架构思维,这将使您在应对复杂系统设计时游刃有余。建议通过实际项目实践,逐步体会各种模式的精妙之处。