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 }

 

posted @ 2020-08-16 12:32  xinpengc  阅读(93)  评论(0编辑  收藏  举报