模板方法模式 -- Template Method

2017-04-17 22:42:25   最后更新: 2017-04-17 22:42:25   访问数量:208




有时我们知道一个算法的所有步骤,但是具体实现却可以有很多种版本,例如一份外卖,用户执行下单、支付、配送、确认收货这几个步骤,但是以配送为例,不同的货品、不同的收货地址需要以不同的配送方式进行配送,我们可以定义一个抽象接口,用来定义一个订单从下单到确认收货的每一个主要步骤,然后在不同场景下通过不同的具体实现来完成整个过程

我们称这个抽象的定义每一个步骤的接口或抽象类为模板方法,一个模板方法用一些抽象的操作定义一个算法,而他的子类重定义这些操作实现具体的行为

 

  1. 可以让抽象的模板方法实现算法中的不变部分,而让他的子类实现算法中可变的行为
  2. 各个子类中公共代码被提取到弗雷中,避免代码重复
  3. 算法的某些步骤需要扩展

 

 

 

如上图所示,模板方法模式由以下组件构成:

  • AbstractClass -- 定义抽象的原语操作,具体的子类重定义它们从而实现一个算法的各步骤,客户端通过调用他的模板方法实现整个算法的调用
  • ConcreteClass -- 算法原语操作的具体实现类,特定的子类实现特定的算法

 

模板方法模式最常用的地方是类库,它们提供了类库中的公共行为

模板方法模式是一种反向控制结构,父类声明需要调用的操作,子类去实现这些操作,但最终由父类决定调用他们的时机,这些操作也被称为钩子操作或回调

几乎在任何一个抽象类中,都能找到模板方法模式的使用

 

策略模式是使用委托机制实现整个算法的抽象、实现、改变和扩展的

而模板方法模式则是通过继承实现算法中某个或某几个步骤的改变和扩展

 






读书笔记      技术帖      龙潭书斋      模板      回调函数      设计模式      design pattern      模板方法      钩子      钩子函数      钩子操作     


京ICP备15018585号