以下是按照分类逻辑(创建型/结构型/行为型)和应用场景关联性组织的设计模式概览,每个模式均用一句话核心思想 + 生活化比喻 + 典型应用场景帮助我们快速建立认知框架:
一、创建型模式(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处理、复杂报表生成
四、模式关联速查表
问题类型 | 适用模式 |
---|---|
对象创建复杂 | 工厂方法、抽象工厂、建造者 |
接口不兼容 | 适配器、桥接 |
动态扩展功能 | 装饰、代理、责任链 |
状态驱动行为变化 | 状态、策略 |
跨对象通信管理 | 观察者、中介者、访问者 |
历史状态管理 | 备忘录、命令 |
算法/流程标准化 | 模板方法、解释器 |
五、学习路线建议
- 第一阶段(基础):优先掌握单例、工厂、观察者、策略、装饰(高频使用)
- 第二阶段(进阶):理解代理、责任链、状态、命令(解决复杂交互)
- 第三阶段(深化):探索访问者、桥接、中介者(应对特定领域问题)
关键:设计模式不是银弹,识别代码中的“坏味道”(如大量if-else、类膨胀)再对症下药,才是正确打开方式。