模板方法模式

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

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
abstract class AbstractClass {
constructor() {}

// 模板方法
public template() : void {
this.operation1();
this.hookMethod() && this.operation2();
this.operation3();
}

// 基本方法
protected operation1() : void {
console.log('使用了方法operation1');
}

protected operation2() : void {
console.log('使用了方法operation2');
}

protected operation3() : void {
console.log('使用了方法operation3');
}

// 钩子方法
protected hookMethod() : boolean {
return true;
}
}

class ConcreteClassA extends AbstractClass {
protected operation2() :void {
console.log('对该方法operation2进行了修改再使用');
}

protected operation3() :void {
console.log('对该方法operation3进行了修改再使用');
}
}

class ConcreteClassB extends AbstractClass {
// 覆盖钩子方法
protected hookMethod() : boolean {
return false;
}
}

function main() {
const class1 : AbstractClass = new ConcreteClassA();
const class2 : AbstractClass = new ConcreteClassB();

class1.template();
class2.template();
}

main();

参考链接