定义一个操作中算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
UML图:
优点:实现了代码复用;
缺点:算法骨架不易升级,模板与子类间耦合性高,修改模板,子类也会受到影响。
C++代码实现:
//模板方法模式
#include<iostream>
#include<string>
using namespace std;
class TestPaper
{
public:
void Question1(){cout<<"1+1="<<endl;}
void Question2(){cout<<"1+2="<<endl;}
virtual void begin(){}
virtual void Answer1(){}
virtual void Answer2(){}
};
class Student1:public TestPaper
{
public:
void begin(){cout<<"LiLei"<<endl;}
void Answer1(){Question1(); cout<<"2"<<endl;}
void Answer2(){Question2(); cout<<"3"<<endl;}
};
class Student2:public TestPaper
{
public:
void begin(){cout<<"HanMeiMei"<<endl;}
void Answer1(){Question1(); cout<<"2"<<endl;}
void Answer2(){Question2(); cout<<"2"<<endl;}
};
int main()
{
TestPaper *tp;
tp=new Student1();
tp->begin();
tp->Answer1();
tp->Answer2();
tp=new Student2();
tp->begin();
tp->Answer1();
tp->Answer2();
return 0;
}