10. 模板方法模式

来源:互联网 发布:淘宝每日好店怎么报名 编辑:程序博客网 时间:2024/05/16 12:05

模板方法模式主要有一下几个要点:

(1)将算法的框架放在父类中,算法的步骤延迟到子类,不同的子类可以对算法的步骤进行不同处理。

(2)算法流程中可以放置一个钩子(hook()),子类可以实现钩子函数,进行条件控制,由子类来控制算法某个步骤是否执行。

eg. sort()中可供用户定义的compare函数。 

class AbstractClass{public:     void TemplateMethod() final // final:(1)修饰类:防止类的继承。(2)修饰成员函数:防止子类覆盖      {          operation1();          operation2();          operation3();                    if(hook())          {               operation3();          }     }     virtual void operation1(){//可以由子类实现...};     virtual void operation3(){//可以由子类实现...};     void operation2() final { //具体实现...};          virtual bool hook(){//可以由子类实现}; };class concreteClass : public AbstractClass{public:     virtual void operation1(){...};     virtual void operation3(){...};     virtual bool hook(){...};};

模板方法与其他模式的比较:
(1)策略模式:替换算法
(2)工厂方法:子类决定创建哪个对象

设计原则:
抽象类说:不要调用我,我会调用你。避免高层组件和底层组件具有明显环形依赖。