再说设计模式-模板方法模式

2019-02-03  本文已影响76人  oneape15

定义

模板方法模式(Template Method Pattern),其定义如下:

Define the skeleton of an algorithm in an operation. deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm's structure.
定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

模板方法模式的通用类图如下:


模板方法模式的通用类图

模板方法模式确实非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式。其中,AbstractClass叫做抽象模板,它的方法分为两类:

为防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写。

抽象模板类:

public abstract class AbstractClass {
  // 基本方法
  protected abstract void doSomething();
  // 基本方法
  protected abstract void doAnything();
  // 模板方法
  public final void templateMethod() {
    // 调用基本方法,完成相关逻辑
    this.doAnything();
    this.doSomething();
  }
}

具体模板类:

public class ConcreteClass1 extends AbstractClass {
  // 基本方法
  protected abstract void doSomething() {
    // 业务逻辑处理
  }
  // 基本方法
  protected abstract void doAnything() {
    // 业务逻辑处理
  }
}

public class ConcreteClass2 extends AbstractClass {
  // 基本方法
  protected abstract void doSomething() {
    // 业务逻辑处理
  }
  // 基本方法
  protected abstract void doAnything() {
    // 业务逻辑处理
  }
}

场景类:

public class Client {
  public static void main(String[] args) {
    AbstractClass clazz1 = new ConcreteClass1();
    AbstractClass clazz2 = new ConcreteClass2();
    // 调用模板方法
    clazz1.templateMethod();
    clazz2.templateMethod();
  }
}

模板方法模式的优点

模板方法模式的缺点

按照我们的设计习惯,抽象类负责声明最抽象,最一般的事务属性和方法,实现类完成具体的事务属性和方法。但是模板方法地颠倒了,抽象类定义了部分抽象方法,由子类实现,子类执行的结果影响了父类的结果,也就是子类对父类产生了影响,这在复杂的项目中,会带来代码阅读的难度,而且也会让新手产生不适感。

模板方法模式的使用场景

上一篇 下一篇

猜你喜欢

热点阅读