设计模式-模板方法

22 阅读1分钟

定义

模板方法模式,是一种行为设计模式,它在父类中定义了一个算法的框架,允许子类在不改变算法结构的情况下重写算法的特定步骤。

这种模式是基于继承的,通过把不改变的行为搬移到超类,去除子类中的重复代码来体现其优势。

UML 类图

typescript 实现

1. 定义抽象类

abstract class AbstractClass {
  public templateMethod(): void {
    this.step1();
    this.step2();
    this.step3();
    this.step4();
  }

  protected step1() {
    console.log("AbstractClass says: I do step1.");
  }
  protected step2() {
    console.log("AbstractClass says: I do step2.");
  }
  protected abstract step3(): void;
  protected abstract step4(): void;
}

2. 创建具体子类

class ConcreteClass1 extends AbstractClass {
  protected step3(): void {
    console.log("ConcreteClass1 says: I do step3.");
  }
  protected step4(): void {
    console.log("ConcreteClass1 says: I do step4.");
  }
}

class ConcreteClass2 extends AbstractClass {
  protected step1(): void {
    console.log("ConcreteClass2 says: I overwrite step1.");
  }
  protected step2(): void {
    console.log("ConcreteClass2 says: I overwrite step2.");
  }
  protected step3(): void {
    console.log("ConcreteClass2 says: I do step3.");
  }
  protected step4(): void {
    console.log("ConcreteClass2 says: I do step4.");
  }
}

3. 使用示例

function clientCode(abstractClass: AbstractClass) {
  abstractClass.templateMethod();
}

console.log("Same Client code can work with different subclasses.");
clientCode(new ConcreteClass1());

console.log("Same Client code can work with different subclasses.");
clientCode(new ConcreteClass2());

通用实现