一. 問題
在面向對象系統的分析與設計過程中經常會遇到這樣一種情況:對於某一個業務邏輯(算法實現)在不同的對象中有不同的細節實現,但是邏輯(算法)的框架(或通用的應用算法)是相同的。Template提供了這種情況的一個實現框架。
二. 模式
Template 模式是采用繼承的方式實現這一點:將邏輯(算法)框架放在抽象基類中,並定義好細節的接口,子類中實現細節。
三. 代碼
[cpp] view plaincopy
- //抽象基類,實現了一個模板方法
- class AbstractClass
- {
- public:
- virtual ~AbstractClass()
- {
- }
-
- //模板方法,只在抽象基類中實現
- void TemplateMethod()
- {
- this->PrimitiveOperation1();
- this->PrimitiveOperation2();
- }
-
- protected:
- virtual void PrimitiveOperation1() = 0;
-
- virtual void PrimitiveOperation2() = 0;
-
- AbstractClass()
- {
- }
- };
-
- //具體子類,實現操作的特定細節
- class ConcreteClass1:public AbstractClass
- {
- public:
- ConcreteClass1()
- {
- }
-
- ~ConcreteClass1()
- {
- }
-
- protected:
- void PrimitiveOperation1()
- {
- cout<<"ConcreteClass1...PrimitiveOperation1"< }
-
- void PrimitiveOperation2()
- {
- cout<<"ConcreteClass1...PrimitiveOperation2"< }
- };
-
- //具體子類,實現操作的特定細節
- class ConcreteClass2:public AbstractClass
- {
- public:
- ConcreteClass2()
- {
- }
-
- ~ConcreteClass2()
- {
- }
-
- protected:
- void PrimitiveOperation1()
- {
- cout<<"ConcreteClass2...PrimitiveOperation1"< }
-
- void PrimitiveOperation2()
- {
- cout<<"ConcreteClass2...PrimitiveOperation2"< }
- };
-
-
- int main()
- {
- AbstractClass* p1 = new ConcreteClass1();
- AbstractClass* p2 = new ConcreteClass2();
-
- p1->TemplateMethod();
- p2->TemplateMethod();
-
- return 0;
- } 其關鍵點就是將通用算法封裝在抽象基類中,並將不同的算法細節放到子類中實現。