《设计模式:可复用面向对象软件的基础》笔记

基本信息

  • 书名:Design Patterns: Elements of Reusable Object-Oriented Software
  • 作者:Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides(GoF / 四人帮)
  • 出版社:Addison-Wesley,1994年
  • 页数:约416页(PDF 12962行)
  • 来源路径:/田浩然上传的资料/电子书/[设计模式:可复用面向对象软件的基础].(Design.Patterns:Elements.of.Reusable.Object-Oriented.Software).Erich.Gamma.文字版.pdf

核心观点

设计模式的本质

设计模式不是初学者能直接想到的方案,而是经过无数次重构、重构后沉淀下来的解决方案。它们捕捉了优秀设计师的隐性经验,让后来者可以直接复用经过验证的方案。

“Design patterns capture solutions that have developed and evolved over time. Hence they aren’t the designs people tend to generate initially.”

为什么需要设计模式

  • 面向对象设计很难,设计可复用的对象更难
  • 新手设计师面对众多选项容易不知所措,倾向于使用熟悉的非OOP技巧
  • 经验丰富的设计师知道”不要从零开始解决每个问题”,而是复用过去的成功方案
  • 设计模式提供了一种通用的设计语言,让设计师能高效地沟通和复用方案

设计模式目录

全书收录 23个设计模式,分为三大类:

创建型模式(Creational Patterns,5个)

关注对象的创建机制,隐藏实例化的细节

模式核心思想
Abstract Factory提供创建一系列相关或相互依赖对象的接口,而无需指定具体类
Builder将一个复杂对象的构建与其表示分离,使同样的构建过程可以创建不同的表示
Factory Method定义一个用于创建对象的接口,让子类决定实例化哪个类
Prototype通过复制现有实例来创建新实例,避免子类化的创建型模式
Singleton确保一个类只有一个实例,并提供全局访问点

结构型模式(Structural Patterns,7个)

关注类和对象的组合,形成更大的结构

模式核心思想
Adapter将一个类的接口转换成客户希望的另外一个接口
Bridge将抽象部分与实现部分分离,使它们都可以独立变化
Composite将对象组合成树形结构以表示”部分-整体”的层次结构
Decorator动态地给一个对象添加一些额外的职责
Facade为子系统中的一组接口提供一个一致的界面
Flyweight运用共享技术有效地支持大量细粒度的对象
Proxy为其他对象提供一种代理以控制对这个对象的访问

行为型模式(Behavioral Patterns,11个)

关注对象之间的通信和责任分配

模式核心思想
Chain of Responsibility将请求的发送者和接收者解耦,使多个对象有机会处理请求
Command将请求封装为对象,从而使用户参数化不同的请求
Interpreter给定一个语言,定义它的文法的一种表示,并定义一个解释器
Iterator提供一种方法顺序访问一个聚合对象中各个元素
Mediator用一个中介对象来封装一系列对象交互
Memento在不破坏封装性的前提下,捕获一个对象的内部状态
Observer定义对象间的一对多依赖关系,当一个对象状态改变时所有依赖者都收到通知
State允许对象在内部状态改变时改变其行为
Strategy定义一系列算法,把它们封装起来,并使它们可相互替换
Template Method定义一个操作中的算法骨架,将一些步骤延迟到子类
Visitor表示一个作用于某对象结构中的各元素的操作

描述模式的格式(标准模板)

每个模式遵循统一的描述框架:

  1. Pattern Name and Classification - 模式名称和分类
  2. Intent - 意图:模式做什么、为什么存在
  3. Also Known As - 别名
  4. Motivation - 动机:通过场景说明问题和解决方案
  5. Applicability - 适用性:何时使用该模式
  6. Structure - 结构:类图/对象图
  7. Participants - 参与者:参与类和对象及其职责
  8. Collaborations - 协作:参与者如何协同工作
  9. Consequences - 后果:使用模式的利弊权衡
  10. Implementation - 实现:实现时的陷阱和技巧
  11. Sample Code - 示例代码:C++或Smalltalk代码片段
  12. Known Uses - 已知应用:现实系统中的实例
  13. Related Patterns - 相关模式:与其他模式的关系

MVC中的模式应用

书中以Smalltalk MVC为例说明模式的实际应用:

核心关系由 Observer、Composite、Strategy 三个模式构成。


推荐阅读顺序

对于不熟悉设计模式的读者,建议从最简单的模式开始:

  1. Abstract Factory (第87页)
  2. Adapter (第139页)
  3. Composite (第163页)
  4. Decorator (第175页)
  5. Factory Method (第107页)
  6. Observer (第293页)
  7. Strategy (第315页)
  8. Template Method (第325页)

这些是最常见、最基础的模式,适用于绝大多数OO系统。


关键结论

  1. 设计模式是经验的重用,不是理论的创新
  2. 模式之间有关联,通过”Related Patterns”可以构建知识网络
  3. 模式有代价,每章都有Consequences讨论利弊权衡
  4. 不要滥用模式,模式解决的是特定问题,不是银弹
  5. 这本书不是用来读一遍就放书的,而是作为参考手册反复查阅

关联笔记


处理日期:2026-08-31 处理方法:PDF文本提取(markitdown) 文件状态:已完成