今天来学习一下模板方法模式,下面先看一下C++代码实现。
#include <iostream>
#include <string>
#include <list>
#include <math.h>
#include <stdlib.h>
using namespace std;
//模板方法模式
class virtualClass
{
public:
virtual void PrimitiveOperation1() {}
virtual void PrimitiveOperation2() {}
void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
cout << "virtualClass TemplateMethod" << endl;
}
};
class ConcreteClassA : public virtualClass
{
public:
void PrimitiveOperation1()
{
cout << "A类实现1" << endl;
}
void PrimitiveOperation2()
{
cout << "A类实现2" << endl;
}
};
class ConcreteClassB : public virtualClass
{
public:
void PrimitiveOperation1()
{
cout << "B类实现1" << endl;
}
void PrimitiveOperation2()
{
cout << "B类实现2" << endl;
}
};
int main()
{
virtualClass *c = NULL;
virtualClass *c1 = NULL;
c = new ConcreteClassA();
c->TemplateMethod();
c1 = new ConcreteClassB();
c1->TemplateMethod();
delete c;
delete c1;
return 0;
}
模板方法模式定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义改算法的步骤。上述代码中,TemplateMethod是固定不变的,而且TemplateMethod中的PrimitiveOperation1和PrimitiveOperation1都是延迟到子类实现,PrimitiveOperation1和PrimitiveOperation2是可变的,TemplateMethod就是一个模板方法。将固定不变的放到父类,把变化的部分放到子类自己去实现,这样就帮助了子类摆脱了重复不变行为的纠缠。
参考资料:大话设计模式