一:相关定义
模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。
二:相关类图和示例:
类图:
下面看代码的示例:
abstract class AbstractClass{
final void templateMethod(){
primitiveOperation1();
primitiveOperation2();
concreteOperation();
hook();
}
//由子类实现的方法
abstract void primitiveOperation1();
abstract void primitiveOperation2();
//这个具体方法定义在抽象类中。子类不可覆盖。它可以被模板方法直接使用,或被子类使用
final void concreteOperation(){
//这里是实现
}
//一个“默认不做事的方法”,称这种方法为“hook”(钩子)。子类视情况看要不要覆盖。“钩子”可以使子类能够有机会来控制父类算法的步骤,例如,让hook作为一个执行步骤的条件,子类通过具体业务判断是返回true还是false
void hook(){};
}
这就是我们的模板方法了,其实在定义中就说的很清楚了,看起来并不复杂,但具体在什么时候使用,就得好好考虑清楚了。
参考书籍:《head first 设计模式》