Design Patterns 3 - 模板方法
1 //template1_lib.cpp 2 //程序库开发人员 3 class Library{ 4 public: 5 void Step1(){ 6 //... 7 } 8 9 void Step3(){ 10 //... 11 } 12 13 void Step5(){ 14 //... 15 } 16 }; 17 18 //template1_app.cpp 19 //应用程序开发人员 20 class Application : public Library{ 21 public: 22 bool Step2(){ 23 //... 24 } 25 26 bool Step4(){ 27 //... 28 } 29 }; 30 31 int main(void) 32 { 33 Library lib(); 34 Application app(); 35 36 lib.Step1(); 37 38 if(app.Step2()){ 39 lib.Step3(); 40 } 41 42 for(int i = 0; i < 4; i++){ 43 app.Step4(); 44 } 45 return 0; 46 } 47 48 //template2_lib.cpp 49 //程序库开发人员 50 class Library{ 51 52 public: 53 //稳定 template method 54 //稳定中有变化 55 void Run(){ 56 Step1(); 57 58 if(Step2()){ //支持变化 --> 虚函数的多态调用 59 Step3(); 60 } 61 62 for(int i = 0; i < 4; i++){ 63 Step4(); //支持变化 --> 虚函数的多态调用 64 } 65 } 66 virtual ~Library(){} //一定要写虚的析构函数,否则delete的时候 67 protected: 68 void Step1(){//稳定 69 //... 70 } 71 72 void Step3(){//稳定 73 //... 74 } 75 76 void Step5(){//稳定 77 //... 78 } 79 virtual void Step2() = 0; //变化 80 virtual void Step4() = 0; //变化 81 }; 82 83 //template2_app.cpp 84 //应用程序开发人员 85 //框架设计人员开发固定的架构 86 class Application : public Library{ 87 protected: 88 virtual bool Step2(){ 89 //... 子类重新实现 90 } 91 92 virtual bool Step4(){ 93 //... 子类重新实现 94 } 95 }; 96 97 int main(void) 98 { 99 Library *plib = new Application(); //多态指针 100 lib->run(); 101 delete plib; 102 return 0; 103 }
Marty