模板方法模式比较容易理解,是有效地提高了代码地复用率,在父类模板中定义一个大的算法架子,用来抽象化,逻辑的实现都堆到子类中去重写这些方法。
客户端只需要认识一个类即可。
class AbstractClass//抽象的模板类
{
public:
virtual void PrimitiveOperation1() {}//抽象方法
virtual void PrimitiveOperation2() {}
void TemplateMethod()
{
PrimitiveOperation1();
PrimitiveOperation2();
}
};
class ConcreteClassA : public AbstractClass
{
public:
void PrimitiveOperation1()
{
cout << "具体方法A方法1实现" << endl;
}
void PrimitiveOperation2()
{
cout << "具体方法A方法2实现" << endl;
}
};
class ConcreteClassB : public AbstractClass
{
void PrimitiveOperation1()
{
cout << "具体方法B方法1实现" << endl;
}
void PrimitiveOperation2()
{
cout << "具体方法B方法2实现" << endl;
}
};
以下是客户端代码。
int main()
{
AbstractClass *a = new ConcreteClassA();
a->PrimitiveOperation1();
return 0;
}
这个方法符合开闭原则,只需要继续添加继承虚函数,即可实现添加功能,也符合代换原则。