职责链模式 -- ChainOfResponsibility

2017-04-04 19:16:36   最后更新: 2017-04-04 19:16:36   访问数量:507




职责链模式让多个对象都有机会处理请求,从而避免了请求发送者与处理者之间的耦合关系

有时,我们的系统中拥有多个处理请求的对象,但当系统获取到请求时并不知道该由哪个对象来处理,这样只要让请求在请求链上依次传递,直到被处理的方式是最为理想和简单的实现

职责链上的每一个处理对象都有一致的处理请求接口,从而让前驱对象可以在需要传递消息时调用后继者的请求处理接口

linux 操作系统的网络协议的解析就是一个典型的职责链模式,请求在由多个协议解析器构成的链上传递,直到符合某个协议从而被解析为止

职责链模式也隐含了多个对象处理消息的优先级

 

 

 

如上图所示,职责链模式由一下组件构成:

  1. Handler -- 定义处理请求接口的抽象类,拥有一个只想自己的指针 successor 用来指向后继处理对象
  2. ConcreteHandler -- Handler 的实现类,负责处理请求或将请求传递给 successor 成员指向的对象也就是他的后继者

职责链通常与组合模式(Composite)一起使用

 

职责链的另一种构成是由 Handler 实现默认的处理操作,通过不同的请求类型或请求中携带的请求码实现精确的转发,这样子类中无需维护后继指针,也无需进行请求的后续传递工作

 

职责链模式最大的优势在于降低了请求发送和接收对象间的耦合度,发送者无需了解具体哪个接收者负责处理,也因此使系统变得更为简单,同时指派职责变得更为灵活,可以在运行时刻动态添加或修改对象链上的某个环节

但是这个模式的问题在于,它并不能保证所有接收到的请求都被正常处理,一个请求有可能没有到达真正需要处理他的接收者对象前就已经被处理,也有可能直到最终的接收者也无法处理

 






技术帖      龙潭书斋      设计模式      design pattern      组合模式      职责链      职责链模式      chain      chain of responsibility     


京ICP备15018585号