“每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。” ── 建筑家 Christopher Alexander

模式 是在某情境 (context) 下,针对某问题的某种解决方案。

  • 情境 就是应用某个模式的情况。这应该是会不断出现的情况。
    [ 我要如何准时上班? ]
  • 问题 就是你想在某情境下达到的目标,但也可以是某情境下的约束。
    [ 我将钥匙锁在车里了。]
  • 解决方案 就是你所追求的: 一个通用的设计,用来解决约束,达到目标。
    [ 打破窗户,进入车内,启动引擎,然后开车上班。]
  • 成本 解决方案所花费的才力 (财力)。
    [ 窗户的价值。]

模式是解决问题的方法,用于不用无所谓; 但当我们应用模式时,就应该考虑怎么才能更好的解决问题 (反之,去除模式)。


最后的模式连连看

  1. 装饰者 ── 包装一个对象,以提供新的行为。
  2. 状态 ── 封装了基于状态的行为,并使用委托在行为之间切换。
  3. 迭代器 ── 在对象的集合中游走,而不暴露集合的实现。
  4. 外观 ── 简化一群类的接口。
  5. 策略 ── 封装可以互换的行为,并使用委托来决定要使用哪一个。
  6. 代理 ── 包装对象,以控制对此对象的访问。
  7. 工厂方法 ── 由子类决定要创建的具体类是哪一个。
  8. 适配器 ── 封装对象,并提供不同的接口。
  9. 观察者 ── 让对象能够在状态改变时被通知。
  10. 模板方法 ── 由子类决定如何实现一个算法中的步骤。
  11. 组合 ── 客户用一致的方式处理对象集合和单个对象。
  12. 单件 ── 确保只有一个对象被创建。
  13. 抽象工厂 ── 允许客户创建对象的家族,而无需指定他们的具体类。
  14. 命令 ── 封装请求成为对象。

终于把这本书啃完了。 每次读完一本书都是感觉空虚,然而这次是累!很累! 接着是恐惧,井底之蛙的恐惧,怎么才能填补这片空白? …… 后话: 一般认为设计模式23个,3个分类,无所谓啦; 我看完这本书唯一学到的就是 ── 随性而为。