模板模式(Template Pattern) —— 定義一個操做中的算法的骨架,而將一些步驟延遲到子類中。Template Method使得子類能夠不改變一個算法的結構便可重定義該算法的某些特定步驟。ios
在面向對象系統的分析與設計過程當中常常會遇到這樣一種狀況:對於某一個業務邏輯(算法實現)在不一樣的對象中有不一樣的細節實現,可是邏輯(算法)的框架(或通用的應用算法)是相同的。Template 提供了這種狀況的一個實現框架。c++
Template模式是採用繼承的方式實現:將邏輯(算法)框架放在抽象基類中,並定義好細節的接口,子類中實現細節。算法
#include<iostream>
using namespace std;
//抽象類 實現總的通用算法框架,算法細節交給子類實現
class Abstact {
public:
virtual ~Abstact(){}
// 將不變的部分(通用的算法框架)在抽象類中實現,而將變化的部分(算法細節)抽象出來交給子類實現。
void TemplateMethod(){
cout<<"TemplateMethod:"<<endl;
this->PrimitiveOperation1();
this->PrimitiveOperation2();
}
protected:
virtual void PrimitiveOperation1()=0;
virtual void PrimitiveOperation2()=0;
Abstact(){}
};
//子類A,實現本身的算法細節
class ConcreteA: public Abstact{
public:
ConcreteA(){}
~ConcreteA(){}
protected:
void PrimitiveOperation1(){
cout<<"A ---> PrimitiveOperation1:"<<endl;
}
void PrimitiveOperation2(){
cout<<"A ---> PrimitiveOperation2:"<<endl;
}
};
//子類B,實現本身的算法細節
class ConcreteB: public Abstact{
public:
ConcreteB(){}
~ConcreteB(){}
protected:
void PrimitiveOperation1(){
cout<<"B ---> PrimitiveOperation1:"<<endl;
}
void PrimitiveOperation2(){
cout<<"B ---> PrimitiveOperation2:"<<endl;
}
};
int main(){
cout<< "template pattern."<<endl;
Abstact* a = new ConcreteA();
a->TemplateMethod();
Abstact* b = new ConcreteB();
b->TemplateMethod();
delete a;
delete b;
return 0;
}
複製代碼