模板方法
模板方法中,有的方法是由超类实现的,有些方法是由子类处理的。需要子类处理的方法需要声明为抽象方法。
模板方法定义了一个算法的框架,框架里面有一些小的步骤,这些步骤既可以在超类中实现,也可以延迟到子类实现。这样使得子类可以在不影响算法结构情况下修改具体实现。
模板方法应声明为final,以防止子类继承时覆盖。
在模板模式中使用钩子
可以使用钩子来影响父类中模板算法的组合顺序。方法是在模板方法中加入if语句,用钩子函数的返回值作为转移条件来控制某算法是否要执行。然后钩子函数提供默认值,可由子类选择是否覆盖父类的钩子函数影响父类模板方法。
钩子方法和抽象方法
当某个方法是子类必须实现的方法时,可以使用抽象方法。如果模板方法中的某步是可选的,需要子类决定其是否使用,可以使用钩子。
好莱坞原则
高层调用底层组件,底层组件不要对高层组件依赖。
应用
一个自然的想法是STL库中的容器。如list,map等,他们内部都有比较算法,但通常你可以指定自己的比较方法供容器排序。