1. 定义

定义一个操作的算法骨架,而将一些步骤延迟到子类中。Template Method 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤

2. 案例

AbstractClass:定义抽象方法

  1. abstract class AbstractClass {
  2. abstract protected void templateMethod();
  3. public void operation() {
  4. //前序操作步骤...
  5. System.out.println("pre ...");
  6. System.out.println("step1...");
  7. System.out.println("step2...");
  8. //执行模板方法(子类中实现具体代码)
  9. templateMethod();
  10. //其他操作步骤
  11. //....
  12. }
  13. }

SubClass:继承重写抽象方法

  1. class SubClass extends AbstractClass {
  2. @Override
  3. protected void templateMethod() {
  4. System.out.println("SubClass executed...");
  5. }
  6. }

使用:执行operation方法就可以执行父类定义的代码逻辑和子类自己实现代码逻辑

  1. public static void main(String[] args) {
  2. AbstractClass subClass = new SubClass();
  3. subClass.operation();
  4. }

3. 应用场景

  1. 当你想让客户端只扩展算法的特定步骤,而不是整个算法或其结构 时,请使用Template Method模式。
  2. 当你有几个类包含几乎相同的算法,但有一些细微的差异时,请使用 此模式。

    4. 优点

  3. 你可以让客户端只覆盖大型算法的某些部分,从而减少算法其他部分 发生的更改对它们的影响。

    1. 你可以将重复的代码拖放到超类中。 Servlet Api & Spring 中的应用