模板方法模式,首先定义一个操作中的算法的骨架,而将一些算法细节延迟到子类中实现。模板方法使得子类不改变一个算法的结构同时又可重定义该算法的某些特定步骤。
模板方法结构图:
AbstractClass类,实现了一个模板方法,定义了算法的骨架(TemplateMethod函数中),primitiveOperation方法是虚函数,子类中要重新实现算法中一个步骤的细节。
ConcreteClass类,实现PrimitiveOperation以完成算法中与特定子类相关的步骤。
具体代码如下:
#include<iostream>
#include<string>
using namespace std;
class TestPaper
{
public:
void TestQuestion1()
{
cout << "练成倚天剑、屠龙刀的玄铁可能是[ ] a.球磨铸铁 b.马口铁 c.高速合金钢 d.碳素纤维"<<endl;
cout << "答案:" << Answer1() << endl;
}
protected:
virtual string Answer1() = 0;//纯虚函数
};
//小明给出的答案
class XiaoMing :public TestPaper
{
string Answer1()
{
return "b";
}
};
//小强给出的答案
class XiaoQiang :public TestPaper
{
string Answer1()
{
return "c";
}
};
int main()
{
TestPaper *xiaoming = new XiaoMing();
xiaoming->TestQuestion1();
TestPaper *xiaoqiang = new XiaoQiang();
xiaoqiang->TestQuestion1();
return 0;
}