模板模式
设计模式
Template Method模式也叫模板模式,是行为型模式之一,它把具有特定步骤算法中的某些必要的处理委让给抽象方法,通过子类继承对抽象方法的不同实现改变整个算法的行为。
Template Method模式一般应用在具有以下条件的应用中:
- 具有统一的操作步骤或操作过程
- 具有不同的操作细节
- 存在多个具有同样操作步骤的应用场景,但某些具体的操作细节却各不相同
总结
在抽象类中统一操作步骤,并规定好接口;让子类实现接口。这样可以把各个具体的子类和操作步骤解耦合。
代码
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!
|