设计模式探秘-7-模板方法模式

模板方法模式的学习与实践

模板方法模式

模板方法模式:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式很简单,只使用了继承机制。
抽象模板的方法分为两类:

  1. 基本方法:由子类实现,并且在模板中被调用。
  2. 模板方法:可能有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。一般模板方法不允许被覆写。

具体模板:实现父类所定义的一个或多个抽象方法,即父类定义的基本方法在子类中实现。

模板方法的类图

模板方法模式优点

  1. 封装不变部分,扩展可变部分。
  2. 提取公共部分代码,便于维护。
  3. 行为由父类控制,子类实现。

模板方法模式缺点

模板方法模式和一般的设计习惯不一样,一般设计抽象类负责最抽象、最一般的事物属性和方法,实现类完成具体的事物属性和方法,但在模板方法模式中,抽象类定义了一部分抽象方法,由子类实现,子类的执行结果影响父类的结果,即子类对父类产生了影响。

使用场景

  1. 多个子类有共有的方法,并且逻辑基本相同。
  2. 重要、复杂的算法,可以将核心算法设计为模板方法,周边细节功能由各个子类实现。
  3. 重构时,模板方法是常用的模式,将相同的代码抽象到父类中,然后通过钩子函数约束其行为。

模板方法的扩展

父类定义抽象的方法确定系统某个功能的默认行为,子类覆写该方法,改变父类的行为。即由子类的方法返回值确定公共部分的执行结果。

参考资料

  1. 设计模式之禅
  2. GoF+23种设计模式解析