模板方法模式:定义一个算法的骨架,将一些步骤延迟到子类中,模板方法使得子类不改变算法的结构但可以重新定义该算法特定的步骤。既要约束子类的行为,又要为子类提供公共的行为,必须使用抽象类。
本质:就是固定算法的骨架。
此模式体现出变与不变。将不变的抽象出来提供公共行为。
模板方法的一个目的:就在于让其他类来扩展或者具体实现在模板方法中固定的算法骨架中特定的算法步骤。
主要使用继承方式,来让父类在运行期间可以调用到子类的行为。
java回调技术,通过回调在接口中定义的方法,调用到具体的实现类中的方法(匿名类对象),达到模板方法的效果。它应该属于模板方法模式的一种变形实现。回调机制采用委托的方式来组合功能。他的耦合度要比继承低,比较灵活。
Template Method要点
1、 Template Method模式是一种非常基础性的设计模式,在面向对象系统中有着大量的应用。它用最简洁的机制(虚函数的多态性)为了很多应用程序框架提供了灵活的扩展点,是代码复用方面的基本实现结构。
2、 除了可以灵活应对子步骤的变化外,“Don't call me.Let me Call you”的反向控制结构是Template Method的典型应用。“Don’t call me.Let me Call you”是指一个父类调用一个子类的操作,而不是相反。
3、 在具体实现方面,被Template Method调用的虚方法可以具有实现,也可以没有任何实现(抽象方法、纯虚方法),但一般推荐将它们设置为protected方法。可以没有具体实现的方法应该称为hook operation(钩子操作),提供了缺省的行为,子类可以在必要时进行扩展。
4、 尽量减少primitive operation,因为需要重新定义的操作越多,客户程序就越长
类图如下: