设计模式概览

以下是按照分类逻辑(创建型/结构型/行为型)应用场景关联性组织的设计模式概览,每个模式均用一句话核心思想 + 生活化比喻 + 典型应用场景帮助我们快速建立认知框架:


一、创建型模式(5种)——解决对象创建问题

1. 单例模式 (Singleton)

  • 核心思想:确保一个类只有一个实例,全局共享
  • 比喻:公司唯一CEO,所有部门需通过指定渠道联系
  • 场景:数据库连接池、日志管理器、配置中心

2. 工厂方法模式 (Factory Method)

  • 核心思想:将对象创建延迟到子类,实现扩展开放
  • 比喻:汽车品牌4S店(本田工厂生产本田车,丰田工厂生产丰田车)
  • 场景:跨平台UI组件生成、支付方式动态选择

3. 抽象工厂模式 (Abstract Factory)

  • 核心思想:创建相关或依赖对象的家族,而不指定具体类
  • 比喻:宜家家居套装(北欧风格工厂生产配套的沙发+茶几+地毯)
  • 场景:跨操作系统GUI套件、游戏不同主题的场景构建

4. 建造者模式 (Builder)

  • 核心思想:分步骤创建复杂对象,隔离构造细节
  • 比喻:定制电脑组装(选择CPU→选内存→配显卡→最终组装)
  • 场景:生成复杂XML/JSON文档、SQL查询构造器

5. 原型模式 (Prototype)

  • 核心思想:通过克隆已有对象来创建新对象
  • 比喻:细胞分裂(基于模板快速复制)
  • 场景:游戏敌人批量生成、避免重复初始化高成本对象

二、结构型模式(7种)——处理类与对象的组合

6. 适配器模式 (Adapter)

  • 核心思想:转换接口使不兼容的类协同工作
  • 比喻:电源转接头(将美标插头转换为国标插座)
  • 场景:整合第三方SDK、旧系统接口兼容

7. 代理模式 (Proxy)

  • 核心思想:为对象提供代理以控制访问
  • 比喻:明星经纪人(过滤粉丝请求、处理事务性工作)
  • 场景:图片懒加载、权限控制、远程方法调用

8. 装饰模式 (Decorator)

  • 核心思想:动态添加功能,避免继承爆炸
  • 比喻:给手机加装外壳→贴膜→挂绳(层层装饰)
  • 场景:Java I/O流、中间件功能扩展

9. 外观模式 (Facade)

  • 核心思想:为复杂子系统提供统一入口
  • 比喻:酒店前台(旅客无需直接对接清洁、餐饮、客房部门)
  • 场景:简化API调用、微服务网关

10. 桥接模式 (Bridge)

  • 核心思想:将抽象与实现解耦,使其独立变化
  • 比喻:遥控器与电视品牌的关系(同款遥控器可操作不同品牌电视)
  • 场景:跨平台图形渲染、多数据库驱动支持

11. 组合模式 (Composite)

  • 核心思想:统一处理树形结构的叶子节点与分支节点
  • 比喻:公司组织结构(部门与员工统一视为“组织单元”)
  • 场景:文件系统管理、菜单树渲染

12. 享元模式 (Flyweight)

  • 核心思想:共享细粒度对象以减少内存开销
  • 比喻:围棋棋子(仅存颜色和位置差异,共享其他属性)
  • 场景:文本编辑器字符处理、游戏粒子系统

三、行为型模式(11种)——管理对象间通信

13. 观察者模式 (Observer)

  • 核心思想:定义对象间的一对多依赖,状态变化自动通知
  • 比喻:微信公众号(作者发文→所有订阅者收到推送)
  • 场景:事件驱动系统、实时数据仪表盘

14. 策略模式 (Strategy)

  • 核心思想:封装算法族,使其可相互替换
  • 比喻:出行导航策略(驾车/步行/公交路线自由切换)
  • 场景:支付方式选择、排序算法切换

15. 命令模式 (Command)

  • 核心思想:将请求封装为对象,支持撤销/队列操作
  • 比喻:餐厅点菜单(厨师按订单烹饪,支持取消订单)
  • 场景:事务操作、遥控器编程

16. 中介者模式 (Mediator)

  • 核心思想:通过中介对象集中管理对象间交互
  • 比喻:机场控制塔(协调所有飞机的起降)
  • 场景:聊天室消息转发、GUI组件通信

17. 备忘录模式 (Memento)

  • 核心思想:捕获并保存对象内部状态以便恢复
  • 比喻:游戏存档(随时保存/读取进度)
  • 场景:文档编辑撤销、游戏状态回滚

18. 模板方法模式 (Template Method)

  • 核心思想:定义算法骨架,子类重写特定步骤
  • 比喻:烹饪食谱(固定流程:备料→烹饪→装盘,细节可变)
  • 场景:框架生命周期管理、标准化业务流程

19. 迭代器模式 (Iterator)

  • 核心思想:提供统一方式访问聚合对象中的元素
  • 比喻:书籍目录(无需知道书页存储方式即可翻页)
  • 场景:集合类遍历(Java的Iterable接口)

20. 状态模式 (State)

  • 核心思想:将对象行为包装到状态类中,消除条件判断
  • 比喻:电梯运行状态(停止/运行中→行为随状态改变)
  • 场景:订单状态流转、游戏角色行为切换

21. 责任链模式 (Chain of Responsibility)

  • 核心思想:将请求沿处理链传递,直到有对象处理它
  • 比喻:客服电话转接(初级→高级→专家级支持)
  • 场景:审批流程、异常处理链

22. 解释器模式 (Interpreter)

  • 核心思想:定义语法规则,解释特定语言中的句子
  • 比喻:翻译官(将外语按语法规则转换为母语)
  • 场景:SQL解析、正则表达式引擎

23. 访问者模式 (Visitor)

  • 核心思想:将算法与对象结构分离,便于新增操作
  • 比喻:保险评估员(访问不同资产计算总价值)
  • 场景:编译器AST处理、复杂报表生成

四、模式关联速查表

问题类型 适用模式
对象创建复杂 工厂方法、抽象工厂、建造者
接口不兼容 适配器、桥接
动态扩展功能 装饰、代理、责任链
状态驱动行为变化 状态、策略
跨对象通信管理 观察者、中介者、访问者
历史状态管理 备忘录、命令
算法/流程标准化 模板方法、解释器

五、学习路线建议

  1. 第一阶段(基础):优先掌握单例、工厂、观察者、策略、装饰(高频使用)
  2. 第二阶段(进阶):理解代理、责任链、状态、命令(解决复杂交互)
  3. 第三阶段(深化):探索访问者、桥接、中介者(应对特定领域问题)

关键:设计模式不是银弹,识别代码中的“坏味道”(如大量if-else、类膨胀)再对症下药,才是正确打开方式。