《Head.First设计模式》的学习笔记(11)--模板方法模式
意图:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
结构:

?
其中AbstractClass 实现为:
?
public abstract class CaffeineBeverage { final void prepareRecipe() {boilWater();brew();pourInCup();addCondiments();} abstract void brew(); abstract void addCondiments(); void boilWater() {System.out.println("Boiling water");} void pourInCup() {System.out.println("Pouring into cup");}}?brew()方法和addCondiments()方法由子类方法延迟实现。
?
?? 上面有一个hook()方法,我们到底何时使用钩子这个方法呢?就是一些步骤进行可以选择的时候。
?
?? 下面我们将介绍模板方法和策略模式的一些不同点:
1.模板方法使用的继承模式,策略模式使用的是对象组合模式。
2.模板方法依赖度比策略高。
总结:
1.为防止子类修改模板方法的算法,可以将模板方法声明为final.
2.其中模板方法模式运用了好莱坞原则。
3.策略模式和模板方法模式都封装了算法,但是模板方法模式使用继承,而策略模式使用对象组合模式。
4.其实工厂方法是一种特殊的模板方法的版本。