C++設計模式之-模板模式


模板方法模式

在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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM