学习地图

Head First 设计模式全景图与学习路径——从策略模式到模板方法,用「封装变化」这一心法串联全书。

为什么需要一张地图

很多开发者第一次接触设计模式时,会被 23 个 GoF 模式的名字和 UML 图吓退。其实设计模式不是 23 个孤立的技巧,而是一条连贯的思路:找出代码中变化的部分,把它抽出来独立封装,让稳定部分不受影响。这条思路贯穿全书,每个模式只是在不同场景下应用这条思路的产物。

《Head First 设计模式》选了 10 个最常用的模式,从最直观的策略模式开始,逐步引入观察者、装饰器、工厂、命令等模式,最后用模板方法串联总结。这张地图帮你提前看清全貌,知道现在在哪、下一步去哪。

Head First 设计模式 · 全书学习地图从模式入门 → 封装变化 → 对象组合 → 状态变化 → 模式总结,五段递进核心心法 把变化的部分抽出来,封装成独立对象模式入门1. 学习地图2. 策略模式封装变化3. 观察者模式4. 装饰器模式对象组合5. 工厂模式6. 单例模式状态变化7. 命令模式8. 适配器与外观模式总结9. 模板方法10. 总复习全书 10 章 · 五段递进 · 三大原则多用组合少用继承 · 针对接口编程 · 对变化封装
全书分五大板块:模式入门建立「针对接口编程」的思维方式,封装变化用观察者和装饰器隔离变化点,对象组合用工厂和单例管理对象创建,状态变化用命令和适配器解耦请求与实现,模式总结串联模板方法与全书原则。

五大板块一览

全书 10 章分五大板块,对应五段递进:

  • 模式入门(2 章):学习地图、策略模式。建立「针对接口编程」的思维,回答「行为怎么变化」。
  • 封装变化(2 章):观察者模式、装饰器模式。隔离数据变化和行为叠加,回答「变化怎么隔离」。
  • 对象组合(2 章):工厂模式、单例模式。管理对象创建,回答「对象怎么造」。
  • 状态变化(2 章):命令模式、适配器与外观。解耦请求与实现,回答「请求怎么转」。
  • 模式总结(2 章):模板方法、总复习。串联全书原则,回答「骨架怎么定」。

三大设计原则

全书反复强调三条原则,每个模式都是它们的具象化:

  1. 针对接口编程,不针对实现编程:客户端面向抽象接口,不依赖具体类。改具体实现不影响客户端。

  2. 多用组合,少用继承:行为用组合注入对象(持有引用),不用继承硬编码在父类。组合可以运行时切换,继承不能。

  3. 为交互对象之间的松耦合设计:对象之间松散依赖,一个变化不引发连锁修改。

代码对照

以策略模式为例,看「继承方案」和「策略方案」的对比:

// 反模式:继承把行为写死在父类
class Duck {
    void fly() { System.out.println("飞"); }
}
class RubberDuck extends Duck {
    void fly() { }  // 橡皮鸭不会飞,覆盖成空方法——废话代码
}
 
// 策略模式:行为抽成接口,用组合注入
interface FlyBehavior { void fly(); }
class FlyWithWings implements FlyBehavior {
    public void fly() { System.out.println("用翅膀飞"); }
}
class FlyNoWay implements FlyBehavior {
    public void fly() { }  // 不会飞
}
class Duck {
    private FlyBehavior flyBehavior;
    void setFlyBehavior(FlyBehavior f) { flyBehavior = f; }
    void performFly() { flyBehavior.fly(); }
}

策略方案中,Duck 持有 FlyBehavior 接口引用,运行时可调 setFlyBehavior 切换行为。新增飞行方式只需加实现类,不改 Duck。

常见误区

小结与练习

  • 全书 10 章分五大板块:模式入门、封装变化、对象组合、状态变化、模式总结
  • 三大原则:针对接口编程、多用组合少用继承、对变化封装
  • 核心心法:把变化的部分抽出来,封装成独立对象
  • 五段递进:行为变化 → 数据变化 → 对象创建 → 请求转发 → 算法骨架

讨论

评论区加载中…