定义
模板方法模式,是一种行为设计模式,它在父类中定义了一个算法的框架,允许子类在不改变算法结构的情况下重写算法的特定步骤。
这种模式是基于继承的,通过把不改变的行为搬移到超类,去除子类中的重复代码来体现其优势。
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());
通用实现
无