Ref:
https://javadoop.com/post/design-pattern#toc_21

模板方法模式

在含有继承结构的代码中,模板方法模式是非常常用的。
通常会有一个抽象类:

  1. public abstract class AbstractTemplate {
  2. // 这就是模板方法
  3. public void templateMethod() {
  4. init();
  5. apply(); // 这个是重点
  6. end(); // 可以作为钩子方法
  7. }
  8. protected void init() {
  9. System.out.println("init 抽象层已经实现,子类也可以选择覆写");
  10. }
  11. // 留给子类实现
  12. protected abstract void apply();
  13. protected void end() {
  14. }
  15. }

模板方法中调用了 3 个方法,其中 apply () 是抽象方法,子类必须实现它,其实模板方法中有几个抽象方法完全是自由的,我们也可以将三个方法都设置为抽象方法,让子类来实现。也就是说,模板方法只负责定义第一步应该要做什么,第二步应该做什么,第三步应该做什么,至于怎么做,由子类来实现。

实现类:

  1. public class ConcreteTemplate extends AbstractTemplate {
  2. public void apply() {
  3. System.out.println("子类实现抽象方法 apply");
  4. }
  5. public void end() {
  6. System.out.println("我们可以把 method3 当做钩子方法来使用,需要的时候覆写就可以了");
  7. }
  8. }

客户端调用演示:

  1. public static void main(String[] args) {
  2. AbstractTemplate t = new ConcreteTemplate();
  3. // 调用模板方法
  4. t.templateMethod();
  5. }

代码其实很简单,基本上看到就懂了,关键是要学会用到自己的代码中。