1. 程式人生 > 實用技巧 >Design Patterns 3 - 模板方法

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 }