模板方法

199 阅读2分钟

定义

在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤

优点:

  1. 模板方法本身和两个抽象操作的具体实现解耦
  2. 子类实现具体的操作,当模板方法需要这两个抽象方法时,会调用它们

钩子

钩子是一种呗声明在抽象类中的方法,但只有空或者默认的实现,

优点:

  1. 可以让子类有能力对算法的不同点进行挂钩
  2. 要不要挂钩由子类决定

好莱坞原则

别调用我们,我们会调用你

在模板方法中的应用:

  1. 高层组件只有在需要子类实现某个方法时才调用子类
  2. 子类如果没有被调用,绝对不会直接调用抽象类

与依赖倒置原则:

  1. 两者目标都在于解耦
  2. 依赖倒置原则要求尽量避免使用具体类,而多使用抽象
  3. 好莱坞原则好让低层组件能够被挂钩进计算中,但又不会被高层组件依赖

数组排序中用到的模板方法

  1. Array.sort(arrays) 是一个静态方法
  2. arrays 中的每个元素通过实现 Comparable 接口的 compareTo 方法,提供比较大小的方法

compareTo为什么不是策略模式 策略模式中,所组合的类实现了整个算法,数组所实现的排序算法并不完整,只需要一个类填补 compareTo方法的实现。

Tips

  1. 策略模式和模板方法都是封装算法,一个用组合,一个用继承
  2. 工厂方法是模板方法的一种特殊版本