模板模式(Template Pattern) —— 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的。Template 提供了这种情况的一个实现框架。
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;
}