模板模式

scorlw 发布于

模板模式

设计模式

Template Method模式也叫模板模式,是行为型模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。

Template Method模式一般应用在具有以下条件的应用中:

  • 具有统一的操作步骤或操作过程
  • 具有不同的操作细节
  • 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同

总结

在抽象类中统一操作步骤,并规定好接口;让子类实现接口。这样可以把各个具体的子类和操作步骤解耦合。

image-20201020210500338

代码

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <iostream>

using namespace std;

class MakeCar
{
public:
virtual void MakeHead() = 0;
virtual void MakeBody() = 0;
virtual void MakeTail() = 0;

void Make()//模板函数,抽象类中统一操作步骤
{
//此处做业务逻辑
MakeTail();
MakeBody();
MakeHead();
}
protected:
private:
};

class Jeep : public MakeCar
{
public:
virtual void MakeHead()
{
cout << "JeepHead" << endl;
}
virtual void MakeBody()
{
cout << "JeepBody" << endl;
}
virtual void MakeTail()
{
cout << "JeepTail" << endl;
}
};

class BWM : public MakeCar
{
public:
virtual void MakeHead()
{
cout << "BWMHead" << endl;
}
virtual void MakeBody()
{
cout << "BWMBody" << endl;
}
virtual void MakeTail()
{
cout << "BWMTail" << endl;
}
};

class Bus : public MakeCar
{
public:
virtual void MakeHead()
{
cout << "BusHead" << endl;
}
virtual void MakeBody()
{
cout << "BusBody" << endl;
}
virtual void MakeTail()
{
cout << "BusTail" << endl;
}
};

int main()
{
MakeCar* car = new Bus;
car->Make();
delete car;

cout << endl;

MakeCar* car2 = new Jeep;
car2->Make();
delete car2;

cout << "Hello world!" << endl;
return 0;
}

输出:

1
2
3
4
5
6
7
8
BusTail
BusBody
BusHead

JeepTail
JeepBody
JeepHead
Hello world!