10. 模板方法模式

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

(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)工厂方法:子类决定创建哪个对象

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值