模板方法模式
当我们要完成在某一细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同时,我们通常考虑使用模板方式来处理。
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。
模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
示例代码
class TemplateClass
{
public:
void TemplateMethod() //模板方法
{
Method1();
Method2();
}
virtual void Method1() =
0;
virtual void Method2() =
0;
};
class A :
public TemplateClass
{
public:
void Method1(){ cout <<
"A 的方法1具体实现" << endl; }
void Method2(){ cout <<
"A 的方法2具体实现" << endl; }
};
class B:
public TemplateClass
{
public:
void Method1(){ cout <<
"B 的方法1具体实现" << endl; }
void Method2(){ cout <<
"B 的方法2具体实现" << endl; }
};
int main()
{
TemplateClass *Tclass =
new A();
Tclass->Method1();
Tclass->Method2();
Tclass =
new B();
Tclass->Method1();
Tclass->Method2();
system(
"pause");
return 0;
}
运行结果
模板方法模式的特点
模板方法模式是通过把不变行为搬移到基类,去除子类中的重复代码。模板方法模式提供了一个很好的代码复用平台。当不变的和可变的行为在子类实现中混合在一起时,不变的行为在子类中重复出现,这是我们就要通过模板方法模式将这些行为搬移到一个类中。