设计模式三大类型深度解析
一、创建型模式(Creational Patterns)
核心目标:解耦对象的创建与使用过程,提供灵活的对象生成机制,降低系统对具体类的依赖。
适用场景:需要动态创建对象、隐藏对象创建细节或优化资源复用率的场景。
1. 单例模式(Singleton)
- 定义:确保一个类仅有一个实例,并提供全局访问点。
- 实现方式:饿汉式(类加载时初始化)、懒汉式(延迟加载)、双重校验锁(线程安全)等 。
- 应用案例:全局配置管理、数据库连接池、日志处理器。
2. 工厂方法模式(Factory Method)
- 定义:定义一个创建对象的接口,由子类决定实例化的具体类。
- 优势:支持扩展(新增产品只需增加子类),符合开闭原则 。
- 典型应用:日志记录器(文件日志、数据库日志)、UI组件生成。
3. 抽象工厂模式(Abstract Factory)
- 定义:提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。
- 场景:跨平台UI库(如Windows/Mac风格的按钮、文本框统一生成)。
4. 建造者模式(Builder)
- 定义:将复杂对象的构建与其表示分离,使同样的构建过程可创建不同形式的产品。
- 特点:分步构造、支持链式调用,适用于多参数对象(如HTTP请求配置)。
5. 原型模式(Prototype)
- 定义:通过复制现有实例创建新对象,避免重复初始化开销。
- 实现:实现
Cloneable
接口,深拷贝与浅拷贝需区分 。 - 应用场景:游戏中的角色复制、文档模板生成。
二、结构型模式(Structural Patterns)
核心目标:通过组合类或对象形成更大结构,提升系统灵活性和可维护性。
适用场景:需要简化对象间关系、扩展功能或优化资源使用的场景。
1. 适配器模式(Adapter)
- 定义:将一个类的接口转换为客户端期望的另一个接口,解决接口不兼容问题。
- 类型:类适配器(继承)、对象适配器(组合)。
- 案例:旧系统接口兼容(如将XML数据接口适配为JSON格式)。
2. 桥接模式(Bridge)
- 定义:将抽象部分与实现部分分离,使两者可独立变化。
- 优势:避免多层继承导致的类爆炸,支持多维度扩展(如形状与颜色的组合)。
3. 装饰模式(Decorator)
- 定义:动态地为对象添加额外职责,替代继承扩展功能。
- 应用:Java I/O流(
BufferedReader
装饰FileReader
)、GUI组件增强。
4. 组合模式(Composite)
- 定义:将对象组合成树形结构以表示“部分-整体”层次,使客户端统一处理单个对象和组合对象。
- 典型场景:文件系统目录结构、菜单树管理。
5. 代理模式(Proxy)
- 定义:为其他对象提供代理以控制访问,常见类型包括虚拟代理(延迟加载)、保护代理(权限控制)和远程代理(网络通信)。
- 案例:Spring AOP中的动态代理、图片懒加载。
6. 享元模式(Flyweight)
- 定义:通过共享技术减少大量细粒度对象的内存消耗。
- 实现:分离内部状态(共享)与外部状态(非共享),如字符池、线程池。
三、行为型模式(Behavioral Patterns)
核心目标:优化对象间的通信与职责分配,增强系统行为的灵活性和可扩展性。
适用场景:需要管理复杂交互逻辑、动态调整行为或实现松耦合的场景。
1. 观察者模式(Observer)
- 定义:定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖对象自动收到通知并更新。
- 实现:Java中的
java.util.Observable
、事件监听机制。
2. 策略模式(Strategy)
- 定义:封装一组算法,使其可互相替换,算法变化独立于客户端。
- 优势:避免多重条件判断,支持动态切换(如支付方式选择)。
3. 模板方法模式(Template Method)
- 定义:在父类中定义算法骨架,将某些步骤延迟到子类实现。
- 应用:框架设计(如Spring的
JdbcTemplate
)、业务流程标准化。
4. 状态模式(State)
- 定义:允许对象在其内部状态改变时改变行为,对象表现得像改变了类。
- 案例:订单状态流转(待支付、已发货、已完成)。
5. 责任链模式(Chain of Responsibility)
- 定义:将请求沿处理链传递,直到有对象处理它。
- 场景:审批流程、异常处理链。
6. 命令模式(Command)
- 定义:将请求封装为对象,支持请求的排队、记录、撤销等操作。
- 应用:GUI按钮操作、事务回滚机制。
总结与对比
类别 | 核心关注点 | 典型模式 | 设计原则体现 |
---|---|---|---|
创建型模式 | 对象创建的灵活性与解耦 | 单例、工厂方法、抽象工厂 | 单一职责、开闭原则 |
结构型模式 | 类与对象的组合与结构优化 | 适配器、桥接、装饰 | 合成复用、接口隔离 |
行为型模式 | 对象间的交互与职责分配 | 观察者、策略、模板方法 | 依赖倒置、里氏替换 |
设计原则关联:
- 单一职责原则:工厂方法模式将对象创建职责分离。
- 开闭原则:策略模式通过扩展新算法而非修改现有代码实现功能增强。
- 合成复用原则:组合模式通过对象组合而非继承构建层次结构。
通过合理运用这三大类设计模式,能够构建高内聚、低耦合的软件系统,有效应对需求变化与系统扩展的挑战。具体模式的选择需结合业务场景与系统目标,避免过度设计。