版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/i_chaoren/article/details/80546015
Template Method是一种组件协作模式:通过晚绑定,来实现框架与应用程序之间的松耦合,是二者之间协作时常用的模式。
动机:在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因而无法和任务的整体结构同时实现。
如何在确定稳定操作结构的前提下,来灵活应对各个子步骤的变化或者晚期实现需求。
定义:定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。
类图关系如下:
下面代码展示了Template Method;
//Template Method
//程序库开发人员
class Library{
public:
//稳定template method
void Run(){
step1();
if(step2()){//支持变化 ==> 虚函数的多态调用
step3();
}
for(int i=0;i<4;++i){
step4();//支持变化 ==> 虚函数的多态调用
}
step5();
virtual ~Library();
}
protected:
void step1(){
//...
}
void step3(){
//...
}
void step5(){
//...
}
virtual bool step2()=0;//变化
virtual bool step4()=0;//变化
}
class Application: public Library{
protected:
virtual bool step2(){
//...子类重写实现
}
virtual void step4(){
//...子类重写实现
}
}
int main(){
Library* plib=new Application();
plib->Run();
delete plib;
}
下面程序展示了没有使用Template Method的情况
//结构化程序设计
class Library
{
public:
void step1(){
//...
}
void step3(){
//...
}
void step5(){
//...
}
};
int main(){
Library lib();
Application app();
lib.step1();
if(app.step2()){
lib.step3();
}
for(int i=0;i<4;++i){
app.step4();
}
lib.step5();
}
扫描二维码关注公众号,回复:
4715065 查看本文章