# 定义

模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。模板方法模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。

在模板模式经典的实现中,模板方法定义为 final,可以避免被子类重写。需要子类重写的方法定义为 abstract,可以强迫子类去实现。不过,在实际项目开发中,模板模式的实现比较灵活,以上两点都不是必须的。

模板模式有两大作用:复用和扩展。其中,复用指的是,所有的子类可以复用父类中提供的模板方法的代码。扩展指的是,框架通过模板模式提供功能扩展点,让框架用户可以在不修改框架源码的情况下,基于扩展点定制化框架的功能。课堂讨论

主要涉及到的概念

  • AbstractClass: 抽象父类,把一些公共的方法提取出来,把可变的方法作为抽象类,最重要的是把算法抽象出来的模板方法。

  • templateMethod:模板方法,固定了希望执行的算法骨架。🔑🔑🔑

  • ConcreteClass:子类,实现抽象父类中定义的抽象方法,调用集成的模板方法时,将执行模板方法中定义的算法流程。

图片描述

# 应用场景

  • Java InputStream
  • Java AbstractList
  • Java Servlet doGet doPost
  • Junit TestCase

# 代码实现


public class AbstractClass {
  public final void templateMethod() {
    //...
    method1();
    //...
    method2();
    //...
  }
  
  protected abstract void method1();
  protected abstract void method2();
}

public class ContreteClass1 extends AbstractClass {
  @Override
  protected void method1() {
    //...
  }
  
  @Override
  protected void method2() {
    //...
  }
}

public class ContreteClass2 extends AbstractClass {
  @Override
  protected void method1() {
    //...
  }
  
  @Override
  protected void method2() {
    //...
  }
}

AbstractClass demo = ContreteClass1();
demo.templateMethod();
最后编辑时间: 3/16/2020, 9:48:17 AM