设计模式(Design Patterns)是软件开发中 可复用的解决方案,它们并不是代码片段,而是 解决特定问题的思想和结构。
GoF(《设计模式》一书)将 23 种经典模式分为三大类:
-
创建型模式(Creational Patterns)
- 关注对象的创建过程,解决“如何实例化对象”。
- 代表模式:单例、工厂方法、抽象工厂、建造者、原型。
-
结构型模式(Structural Patterns)
- 关注类和对象的组合,解决“如何组织对象结构”。
- 代表模式:适配器、装饰器、代理、外观、桥接、组合、享元。
-
行为型模式(Behavioral Patterns)
- 关注对象之间的职责分配与交互,解决“如何协作完成任务”。
- 代表模式:观察者、策略、命令、责任链、状态、迭代器、备忘录、模板方法、访问者、中介者、解释器。
三大类模式的学习顺序
1. 从 创建型模式 入手
- 原因:对象的创建是最基础的问题,理解这些模式能帮助你写出更灵活的代码。
- 推荐顺序:
- 单例(最简单,常见)
- 工厂方法 → 抽象工厂(逐步理解工厂思想)
- 建造者(复杂对象构建)
- 原型(克隆思想)
👉 学完后,你会对“如何优雅地创建对象”有清晰认识。
2. 进阶到 结构型模式
- 原因:当项目规模扩大,类和对象的关系变复杂,结构型模式能帮助你组织代码。
- 推荐顺序:
- 适配器(接口兼容,最常用)
- 装饰器(动态扩展功能)
- 代理(控制访问)
- 外观(简化接口)
- 桥接(分离抽象与实现)
- 组合(树形结构)
- 享元(性能优化)
👉 学完后,你会掌握“如何组织对象结构,让系统更灵活”。
3. 最后学习 行为型模式
- 原因:行为型模式涉及对象之间的交互,理解难度更高,但对系统扩展性帮助最大。
- 推荐顺序:
- 观察者(事件通知,最常见)
- 策略(算法切换)
- 命令(请求封装)
- 责任链(请求传递)
- 状态(状态驱动行为)
- 迭代器(集合遍历)
- 备忘录(状态保存)
- 模板方法(算法骨架)
- 访问者(操作与结构分离)
- 中介者(集中管理交互)
- 解释器(语言解析,最少用)
👉 学完后,你会理解“如何让对象协作完成复杂任务”。
学习建议
-
先理解思想,再写代码
- 模式不是死记硬背的代码,而是解决问题的思路。
- 建议先理解“为什么需要这个模式”,再看实现。
-
结合实际项目练习
- 在 GUI、游戏、网络编程、数据库等场景中尝试应用模式。
- 比如:
- 日志系统 → 单例
- 跨平台 UI → 抽象工厂
- 游戏角色 → 状态模式
- 消息系统 → 观察者
-
不要滥用模式
- 模式是工具,不是目标。
- 如果一个简单的 if-else 就能解决问题,不必强行套用模式。
-
多对比相似模式
- 工厂方法 vs 抽象工厂
- 装饰器 vs 代理
- 策略 vs 状态
- 通过对比更容易理解差异和适用场景。
总结
- 创建型模式:解决“如何创建对象”。
- 结构型模式:解决“如何组织对象结构”。
- 行为型模式:解决“如何让对象协作”。
学习顺序建议:
👉 先学创建型 → 再学结构型 → 最后学行为型。
最终目标:
- 不是死记模式名称,而是能在实际开发中 识别问题 → 选择合适模式 → 灵活应用。