本文最后更新于 2025-10-16,文章内容可能已经过时。

一、设计模式分类

设计模式分为三大类,共 23种

  1. 创建型模式(5种)
    主要解决对象的创建问题,封装复杂的创建过程
  2. 结构型模式(7种)
    主要解决类或对象的组合方式,优化系统结构
  3. 行为型模式(11种)
    主要解决对象之间的交互和职责分配问题

模式类型核心思想典型应用场景
创建型模式封装对象创建逻辑支付系统、GUI组件、配置管理
结构型模式组合类或对象结构接口适配、权限控制、延迟加载
行为型模式对象间交互与职责分配事件驱动、策略切换、状态管理

二、具体设计模式

1. 创建型模式

模式名称目的适用场景
单例模式确保一个类只有一个实例,并提供全局访问点需要全局唯一实例的场景(如数据库连接池、配置管理)
工厂模式将对象的创建逻辑与使用逻辑分离,封装复杂创建过程对象创建逻辑复杂,或需要动态决定创建哪种类型的对象
抽象工厂模式提供一个创建一系列相关或依赖对象的接口,无需指定具体类需要创建一组相关对象的场景(如跨平台主题库)
建造者模式分步骤构建复杂对象,允许逐步配置对象属性对象创建步骤复杂,且需要灵活定制不同配置的场景(如游戏角色创建)
原型模式通过复制现有实例创建新对象,避免直接实例化对象创建成本高,且已有实例可作为模板时(如克隆对象)

2. 结构型模式

模式名称目的适用场景
适配器模式将不兼容的接口转换为兼容的接口,使原本无法协作的类能够协作集成旧系统或第三方库时,接口不匹配的场景
装饰者模式动态地为对象添加功能,避免继承导致的类爆炸需要为对象添加额外功能,且功能可能组合变化的场景(如咖啡加料)
代理模式控制对对象的访问,提供额外操作(如权限验证、延迟加载)需要控制对象访问或增强功能的场景(如远程调用、缓存代理)
外观模式为复杂子系统提供统一接口,简化调用需要简化接口或隐藏子系统复杂度的场景(如家电遥控器)
组合模式将对象组合成树形结构,统一处理单个对象和组合对象需要处理部分-整体层次结构的场景(如文件系统目录)
桥接模式将抽象部分与实现部分分离,使它们可以独立变化抽象和实现需要独立扩展的场景(如图形接口与具体绘图引擎)
享元模式通过共享对象减少内存占用,提高性能需要大量相似对象且创建开销大的场景(如文本编辑器中的字符对象)

3. 行为型模式

模式名称目的适用场景
策略模式定义一系列算法,使它们可以互换,独立于使用它们的客户端需要在运行时动态选择算法或策略的场景(如支付方式选择)
观察者模式建立一对多的依赖关系,当对象状态变化时通知所有依赖者需要实现事件驱动或发布-订阅机制的场景(如消息推送、GUI事件处理)
责任链模式将请求的发送者和接收者解耦,多个对象依次处理请求需要处理请求链的场景(如审批流程、异常处理)
命令模式将请求封装为对象,支持操作的排队、日志记录和撤销需要将操作封装为对象的场景(如事务管理、宏命令)
状态模式允许对象在其内部状态改变时改变行为对象行为依赖于状态且状态频繁变化的场景(如订单状态流转)
模板方法模式定义算法骨架,将某些步骤延迟到子类实现需要复用算法框架但允许子类自定义部分步骤的场景(如测试框架)
访问者模式在不修改元素类的前提下,为对象结构中的元素添加新操作需要对对象结构中的元素执行多种操作且操作逻辑复杂时(如编译器语法树遍历)
中介者模式通过中介者对象集中处理对象间的交互,降低耦合对象间交互复杂且需要解耦的场景(如聊天室消息转发)
迭代器模式提供一种顺序访问集合元素的方式,而不暴露其内部表示需要遍历集合对象且不想暴露其内部结构的场景(如数据库查询结果集)
备忘录模式保存对象的状态并在需要时恢复,且不破坏封装性需要实现撤销操作或状态快照的场景(如游戏存档)
解释器模式定义语言的文法,并提供解释器来解析语言中的句子需要实现特定领域语言或规则解析的场景(如正则表达式解析)

根据目的和用途不同,设计模式可分为创建型模式、结构型模式和行为型模式三种。

根据处理范围不同,设计模式可分为类模式和对象模式。类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,属于静态关系。对象模式处理对象之间的关系,这些关系在运行时刻变化,更具动态性。