无锡市网站搭建,邓州网站制作,猫猫 wordpress,青岛网站设计如何做TempleteMethod
动机
在软件构建过程中#xff0c;对于某一项任务#xff0c;它常常有稳定的整体操作结构#xff0c;但各个子步骤却有很多改变的需求#xff0c;或者由于固有的原因 #xff08;比如框架与应用之间的关系#xff09;而无法和任务的整体结构同时实现。如…TempleteMethod
动机
在软件构建过程中对于某一项任务它常常有稳定的整体操作结构但各个子步骤却有很多改变的需求或者由于固有的原因 比如框架与应用之间的关系而无法和任务的整体结构同时实现。如何在确定稳定操作结构的前提下来灵活应对各个子步骤的变化或者晚期实现需求
模式定义
定义一个操作中的算法的骨架 (稳定)而将一些步骤延迟 (变化)到子类中。Template Method使得子类可以不改变 (复用)一个算法的结构即可重定义(override 重写)该算法的某些特定步骤。在基类实现稳定的模板方法变化的部分可以通过晚绑定虚函数-函数指针由子类实现多态。
#include iostream
using namespace std;class AbstractClass
{
public:void templateMethod(){primitiveOperation1();primitiveOperation2();}virtual ~AbstractClass(){cout AbstractClass endl;}
protected://变化的由子类override来实现 也可以不是纯虚virtual void primitiveOperation1() 0;virtual void primitiveOperation2() 0;
};class ConcreteClass : public AbstractClass
{
public:void primitiveOperation1(){cout Primitive operation 1 endl;}void primitiveOperation2(){cout Primitive operation 2 endl;}~ConcreteClass(){cout ConcreteClass endl;}
};int main()
{AbstractClass *tm new ConcreteClass;tm-templateMethod();delete tm;return 0;
}
/*
Primitive operation 1
Primitive operation 2
ConcreteClass //逆序析构
AbstractClass
*/总结
Template Method是一种非常基础性的设计模式在面向对象系统中有着大量的应用。它用最简洁的机制虚函数的多态性 为很多应用程序框架提供了灵活的扩展点是代码复用方面的基本实现结构。除了可以灵活应对子步骤的变化外“不要调用我让我来调用你”的反向控制结构是Template Method的典型应用也就是晚绑定。在具体实现方面被Template Method调用的虚方法可以具有实现也可以没有任何实现抽象方法、纯虚方法但一般推荐将它们设置为protected方法。