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