模板方法:
定义一个操作算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的特定步骤。
#include "stdafx.h"
#include<iostream>
using namespace std;
class AbstractClass
{
public:
virtual void PrimitiveOperation1() = 0;
virtual void PrimitiveOperation2() = 0;
virtual void PrimitiveOperation3() = 0;
void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
PrimitiveOperation3();
}
};
class ConcreteClassA : public AbstractClass
{
public:
void PrimitiveOperation1()
{
cout << "具体类A方法1实现" << endl;
}
void PrimitiveOperation2()
{
cout << "具体类A方法2实现" << endl;
}
void PrimitiveOperation3()
{
cout << "具体类A方法3实现" << endl;
}
};
class ConcreteClassB : public AbstractClass
{
public:
void PrimitiveOperation1()
{
cout << "具体类B方法1实现" << endl;
}
void PrimitiveOperation2()
{
cout << "具体类B方法2实现" << endl;
}
void PrimitiveOperation3()
{
cout << "具体类B方法3实现" << endl;
}
};
int main()
{
AbstractClass* c = new ConcreteClassA();
c->TemplateMethod();
c = new ConcreteClassB();
c->TemplateMethod();
return 0;
}
使用场景:遇到一系类步骤构成的过程需要执行,这个过程从高层次上看是相同的,但有些步骤实现可能不同。
优点:通过把不变行为搬移到超类,去除了子类中的重复代码。