模版方式模式(Template Method mode)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法似的子类可以不改变一个算法的结构即可重定义该算法的某些特定的步骤。换句话说,就是当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们可以通过模板方法模式把这些行为搬移到单一的地方,这样就帮助子类摆脱重复的不变形为的纠缠。
//Template.h
#ifndef _TEMPLETE_H
#define _TEMPLETE_H
class AbstractClass
{
public:
virtual void PrimitiveOperation1();
virtual void PrimitiveOperation2();
void TemplateMethod();
};
class ConcreteClass1:public AbstractClass
{
public:
void PrimitiveOperation1();
void PrimitiveOperation2();
};
class ConcreteClass2:public AbstractClass
{
public:
void PrimitiveOperation1();
void PrimitiveOperation2();
};
#endif
//Templete.cpp
#include "Templete.h"
#include <iostream>
using namespace std;
void AbstractClass::TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
cout<<"TemplateMethod done..."<<endl;
}
void AbstractClass::PrimitiveOperation1()
{
}
void AbstractClass::PrimitiveOperation2()
{
}
void ConcreteClass1::PrimitiveOperation1()
{
cout<<"primitive operation1 of concreteclass1..."<<endl;
}
void ConcreteClass1::PrimitiveOperation2()
{
cout<<"primitive operation2 of concreteclass1..."<<endl;
}
void ConcreteClass2::PrimitiveOperation1()
{
cout<<"primitive operation1 of concreteclass2..."<<endl;
}
void ConcreteClass2::PrimitiveOperation2()
{
cout<<"primitive operation2 of concreteclass2..."<<endl;
}
//main.cpp
#include "Templete.h"
#include <iostream>
int main()
{
AbstractClass* p1 = new ConcreteClass1();
p1->TemplateMethod();
AbstractClass* p2 = new ConcreteClass2();
p2->TemplateMethod();
return 0;
}
本文深入探讨了模板方法模式在软件设计中的应用,通过具体实例展示了如何利用此模式组织算法结构,使得不变的行为集中管理,允许子类重定义特定步骤以实现算法的灵活性和扩展性。通过剖析模板类与具体类之间的交互,读者能够掌握如何在不同场景下灵活运用模板方法模式,提升代码复用性和维护性。


被折叠的 条评论
为什么被折叠?



