模板方法模式
在GOF的《设计模式:可复用面向对象软件的基础》一书中对模板方法模式是这样说的:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变一个算法的接口即可重定义改算法的某些特定步骤。
UML类图
代码实现:
1 // Template.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include<string> 7 using namespace std; 8 9 10 class AbstractClass 11 12 { 13 14 public: 15 16 void TemplateMethod() 17 18 { 19 20 PrimitiveOperation1(); 21 22 cout<<"TemplateMethod"<<endl; 23 24 PrimitiveOperation2(); 25 26 } 27 28 29 30 protected: 31 32 virtual void PrimitiveOperation1() 33 34 { 35 36 cout<<"Default Operation1"<<endl; 37 38 } 39 40 41 42 virtual void PrimitiveOperation2() 43 44 { 45 46 cout<<"Default Operation2"<<endl; 47 48 } 49 50 }; 51 52 53 54 class ConcreteClassA : public AbstractClass 55 56 { 57 58 protected: 59 60 virtual void PrimitiveOperation1() 61 62 { 63 64 cout<<"ConcreteA Operation1"<<endl; 65 66 } 67 68 69 70 virtual void PrimitiveOperation2() 71 72 { 73 74 cout<<"ConcreteA Operation2"<<endl; 75 76 } 77 78 }; 79 80 81 82 class ConcreteClassB : public AbstractClass 83 84 { 85 86 protected: 87 88 virtual void PrimitiveOperation1() 89 90 { 91 92 cout<<"ConcreteB Operation1"<<endl; 93 94 } 95 96 97 98 virtual void PrimitiveOperation2() 99 100 { 101 102 cout<<"ConcreteB Operation2"<<endl; 103 104 } 105 106 }; 107 int _tmain(int argc, _TCHAR* argv[]) 108 { 109 110 AbstractClass *pAbstractA = new ConcreteClassA; 111 112 pAbstractA->TemplateMethod(); 113 114 115 116 AbstractClass *pAbstractB = new ConcreteClassB; 117 118 pAbstractB->TemplateMethod(); 119 120 121 122 if (pAbstractA) delete pAbstractA; 123 124 if (pAbstractB) delete pAbstractB; 125 126 system("pause"); 127 return 0; 128 }