1、意图
定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(重写)该算法的某些步骤。
在软件构建的过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体同时实现。
结构
代码
#include <iostream>
using namespace std;
class Library{
public:
void run(){
if(step1()){
step2();
}
step3();
for(int i = 0; i < 4; i++){
step4();
}
step5();
}
virtual ~Library(){
}
protected:
void step3(){
cout << "step3\n";
}
void step5(){
cout << "step5\n";
}
virtual bool step1() = 0;
virtual void step2() = 0;
virtual void step4() = 0;
};
class Application : public Library{
protected:
virtual bool step1(){
cout << "step1\n";
return true;
}
virtual void step2(){
cout << "step2\n";
}
virtual void step4(){
cout << "step4\n";
}
};
int main(void)
{
Library* plib = new Application;
plib->run();
}