【定义】定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模版方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
【场景】模版方法模式是通过把不变行为搬移到超类,去除子类中的重复代码来体现她的优势。当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为在子类中重复出现。通过模版方法模式把这些行为搬移到单一的超类中去。 如下面则是将TemplateMethod的实现(可变行为)分别放到ConcreteClassA和ConcreteClassB中,而将TempolateMethod的调用放到超类AbstractClass中(不变行为)。
【UML】
【代码】
#include <iostream>
using namespace std;
class AbstractClass
{
public:
virtual void primitiveOperation1()
{
}
virtual void primitiveOperation2()
{
}
public:
void templateMethod()
{
primitiveOperation1();
primitiveOperation2();
}
};
class ConcreteClassA : public AbstractClass
{
public:
virtual void primitiveOperation1()
{
cout<<"ConcreteClassA op1"<<endl;
}
virtual void primitiveOperation2()
{
cout<<"ConcreteClassA op2"<<endl;
}
};
class ConcreteClassB : public AbstractClass
{
public:
virtual void primitiveOperation1()
{
cout<<"ConcreteClassB op1"<<endl;
}
virtual void primitiveOperation2()
{
cout<<"ConcreteClassB op2"<<endl;
}
};
int main()
{
ConcreteClassA a;
ConcreteClassB b;
a.templateMethod();
b.templateMethod();
return 0;
}