Template方法模式,与c++的模板没有直接关系。或者可以认为这里的template是针对方法(函数)来说的,而c++的template则是针对成员变量或者参数来讲的。字面意思有一些关系。
template method主要是通过在父类中定义一个模板,子类中实现该模板中的个性化部分。实现了固定部分和变化部分的解耦。模板方法本身比较简单。其目的就是为了共享一些公共部分,提升代码复用性。
简单写了一个demo,很简单。参考了下面的blog,主要是觉得例子举得很贴切:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/10/2584272.html
#include <iostream>
using namespace std;
class TestPaper{
public:
TestPaper(){}
~TestPaper(){}
void Question1(){
cout<<"1+1=?"<<endl;
}
void Question2(){
cout<<"什么是模板方法?"<<endl;
}
void Process(){
Question1();
DoAnswer1();
Question2();
DoAnswer2();
}
protected:
virtual void DoAnswer1() = 0;
virtual void DoAnswer2() = 0;
};
class StuA : public TestPaper{
public:
StuA(){}
~StuA(){}
virtual void DoAnswer1(){
cout<<"StuA:"<<"2!"<<endl;
}
virtual void DoAnswer2(){
cout<<"StuA:模板方式是一种设计模式。与模板可不是一回事儿哦!"<<endl;
}
};
class StuB : public TestPaper{
public:
StuB(){}
~StuB(){}
virtual void DoAnswer1(){
cout<<"StuB:3!"<<endl;
}
virtual void DoAnswer2(){
cout<<"StuB:模板方式就是父类先确定逻辑框架,把确定的流程,操作等固化到父类,将一些个性化的操作留给子类去实现。这个思想叫'好莱坞法则':别找我们,我们找你。对应到模板方法,父类调用子类的操作,而不是相反。"<<endl;
}
};
int main(){
StuA * stuA = new StuA();
stuA->Process();
StuB * stuB = new StuB();
stuB->Process();
return 0;
}
模板方法,比较简单,且很好理解。本身模板方法更像一个纯接口。而不是一个类。在C++中没有区分接口和继承,所以理解起来有点别扭。实际上模板类和其实现,可能完全没有继承关系。
另外,模板方法,也可以有一些默认操作。从而降低子类的负担。