HeadFirst设计模式学习笔记5-模板模式

模板方法

         模板方法中,有的方法是由超类实现的,有些方法是由子类处理的。需要子类处理的方法需要声明为抽象方法。

         模板方法定义了一个算法的框架,框架里面有一些小的步骤,这些步骤既可以在超类中实现,也可以延迟到子类实现。这样使得子类可以在不影响算法结构情况下修改具体实现。

         模板方法应声明为final,以防止子类继承时覆盖。

在模板模式中使用钩子

         可以使用钩子来影响父类中模板算法的组合顺序。方法是在模板方法中加入if语句,用钩子函数的返回值作为转移条件来控制某算法是否要执行。然后钩子函数提供默认值,可由子类选择是否覆盖父类的钩子函数影响父类模板方法。

钩子方法和抽象方法

         当某个方法是子类必须实现的方法时,可以使用抽象方法。如果模板方法中的某步是可选的,需要子类决定其是否使用,可以使用钩子。

好莱坞原则

         高层调用底层组件,底层组件不要对高层组件依赖。

应用

         一个自然的想法是STL库中的容器。如list,map等,他们内部都有比较算法,但通常你可以指定自己的比较方法供容器排序。

你可能感兴趣的:(设计模式,算法,框架,list)