定义
在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤
优点:
- 模板方法本身和两个抽象操作的具体实现解耦
- 子类实现具体的操作,当模板方法需要这两个抽象方法时,会调用它们
钩子
钩子是一种呗声明在抽象类中的方法,但只有空或者默认的实现,
优点:
- 可以让子类有能力对算法的不同点进行挂钩
- 要不要挂钩由子类决定
好莱坞原则
别调用我们,我们会调用你
在模板方法中的应用:
- 高层组件只有在需要子类实现某个方法时才调用子类
- 子类如果没有被调用,绝对不会直接调用抽象类
与依赖倒置原则:
- 两者目标都在于解耦
- 依赖倒置原则要求尽量避免使用具体类,而多使用抽象
- 好莱坞原则好让低层组件能够被挂钩进计算中,但又不会被高层组件依赖
数组排序中用到的模板方法
- Array.sort(arrays) 是一个静态方法
- arrays 中的每个元素通过实现 Comparable 接口的 compareTo 方法,提供比较大小的方法
compareTo为什么不是策略模式 策略模式中,所组合的类实现了整个算法,数组所实现的排序算法并不完整,只需要一个类填补 compareTo方法的实现。
Tips
- 策略模式和模板方法都是封装算法,一个用组合,一个用继承
- 工厂方法是模板方法的一种特殊版本