Java设计模式
一、设计模式的定义与分类
设计模式是解决软件设计问题的经验总结,旨在提升代码的可维护性、复用性和扩展性。Java中的设计模式通常分为三大类:
1. 创建型模式(5种):
解决对象创建问题,避免直接使用new关键字。包括:
o 工厂方法模式
o 抽象工厂模式
o 单例模式
o 生成器模式(建造者模式)
o 原型模式
2. 结构型模式(7种):
关注对象/类的组合方式,形成更灵活的结构。包括:
o 适配器模式(如兼容不同接口的类协作)
o 桥接模式(分离抽象与实现,支持独立扩展)
o 装饰模式(动态添加功能,替代继承)
o 代理模式(控制对象访问)
o 享元模式(共享细粒度对象,节省资源)
o 组合模式(树形结构处理部分-整体关系)
o 外观模式(简化复杂子系统调用)
3. 行为型模式(11种):
管理对象间的交互与职责分配。例如:
o 观察者模式(事件通知机制)
o 策略模式(算法灵活替换)
o 模板方法模式(定义算法骨架)
o 责任链模式(请求传递链)
o 迭代器模式(统一遍历集合)
二、核心OOP设计原则
设计模式基于以下原则实现高内聚、低耦合的设计:
1. 单一职责原则:一个类仅承担一个职责。
2. 开闭原则:对扩展开放,对修改关闭(通过抽象和接口实现)。
3. 里氏替换原则:子类可透明替换父类。
4. 依赖倒置原则:高层模块不依赖底层实现细节,两者依赖抽象。
5. 接口隔离原则:避免庞大接口,按需拆分。
6. 迪米特法则:减少对象间的直接依赖。
7. 组合优于继承:优先通过组合扩展功能。
三、常见模式详解与示例
1. 单例模式
o 定义:确保类仅有一个实例,如数据库连接池。
o 实现(懒汉式,双重检查锁):
public class Singleton {
private static volatile Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
o 注意事项:需防范反射和序列化破坏单例。
2. 工厂模式
o 定义:将对象创建逻辑封装,解耦客户端与具体类。
o 示例:
interface Product { void create(); }
class ProductA implements Product { /* 实现 */ }
class Factory {
public static Product getProduct(String type) {
return switch (type) {
case "A" -> new ProductA();
// 扩展新产品时无需修改客户端代码
default -> throw new IllegalArgumentException();
};
}
}
3. 观察者模式
o 场景:实现事件驱动的通知机制,如GUI组件状态更新。
o 结构:
o Subject(主题)维护观察者列表,通过notifyObservers()推送消息。
o Observer接口定义update()方法,由具体观察者实现响应逻辑。
4. 适配器模式
o 作用:转换接口不兼容的类,如将遗留系统接口适配新需求。
o 实现方式:
o 对象适配器:通过组合持有被适配对象(推荐)。
o 类适配器:通过继承实现(需多语言支持,如Java需结合接口)。
四、应用场景与注意事项
o 选择模式的标准:
根据问题类型匹配模式类别(如对象创建问题→创建型模式),避免过度设计。
o 典型应用:
o 装饰模式用于Java I/O流(如BufferedReader包装FileReader)。
o 代理模式实现远程调用(如RMI)或延迟加载。
o 陷阱规避:
o 单例模式需考虑多线程安全;
o 工厂模式需平衡简单工厂与抽象工厂的复杂度;
o 观察者模式需避免循环依赖。
本文暂时没有评论,来添加一个吧(●'◡'●)