定义:一个操作中的算法骨架稳定,可以将一些步骤延迟到子类中。子类不改变一个算法的结构而重写该算法的某些特征。
类图
案例:应用程序需要调用一个库的几个方法 完成一个相对来说比较固化的算法处理流程。
第一种方式
没有使用模板方法。
class Template_Lib
{
public:
Template_Lib(){}
void step1(){}
void step3(){}
void step5(){}
};
class App
{
public:
App(){}
bool step2(){}
void step4(){}
};
应用程序
void test_Tenmplate(){
Template_Lib lib;
App app;
lib.step1();
if(app.step2()){
lib.step3();
}
app.step4();
lib.step5();
}
第二种方式
将固定的算法固化在lib中,将需要修改的部分使用虚函数的方式待未来去做。
class Template_Lib
{
public:
Template_Lib(){}
void step1(){}
void step3(){}
void step5(){}
virtual bool step2()=0;
virtual void step4()=0;
void run(){
step1();
if(step2()){
step3();
}
step4();
step5();
}
virtual ~Template_Lib(){};
};
class App :public Template_Lib
{
public:
App(){}
bool step2(){}
void step4(){}
};
应用程序
App app;
app.run();