美文网首页
二十九、职责连模式

二十九、职责连模式

作者: LeeLeCoder | 来源:发表于2017-09-20 21:30 被阅读0次

1. 何为职责链模式

职责链模式的主要思想是,对象引用了同一类型的另一个对象,形成一条链。链中的每个对象实现了同样的方法,处理对链中的第一个对象发起的同一个请求。如果一个对象不知道如何处理请求,它就把请求传给下一个响应器(即successor)。处理请求的对象与其successor之间的关系如图1-1所示:


图1-1 职责链模式的类图

Handler是上层抽象类,定义了一个方法----handleRequest,处理它知道如何处理的请求对象。ConcreteHandler1和ConcreteHandler2实现了handleRequest方法,来处理他们认识的请求对象。Handler也有一个指向另一个同类型实例的引用,即successor。当调用Handler实例的handlerRequest消息时,如果这个实例不知道如何处理请求,它会用同样的消息把请求转发给successor。如果successor可以处理,就行了;否则,它就会把请求传给下一个successor(如果有的话)。这个过程会一直进行下去,直到请求被传到链中的最后一个Handler。图1-2中的对象图表示了Handler的实例用successor形成链条的方式。

图1-2 运行时的请求处理程序链的一种典型结构

aClient有一个对Handler实例的引用,叫aHandler。aHandler是处理程序链的第一个对象,即aConcreteHandler。aConcreteHandler用它内部的successor引用跟另一个Handler实例连接起来。用这种策略处理请求的最低要求是,如果不懂如何处理请求,就传给下一个处理程序(有些实现中,无论处理程序是否能够处理请求,都要求处理程序吧请求传递下去)。

2. 使用场景

在以下情形,自然会考虑使用这一模式:

  • 有多个对象可以处理请求,而处理程序只有在运行时才能确定;
  • 向一组对象发起请求,而不想显示指定处理请求的特定处理程序;

3. 代码实现



职责链模式弱化了客户端和处理端之间关系,客户端只需要发起请求即可获得最终的结果,不用关心最终是谁处理的事情,同样因为处理是封闭的,也可以动态的修改处理过程,带来的问题可能会造成处理延迟。

4.优缺点

  • 优点

    • 降低耦合度。它将请求的发送者和接收者解耦。
    • 简化了对象。使得对象不需要知道链的结构。
    • 增强给对象指派职责的灵活性。通过改变链内的成员或者调动它们的次序,允许动态地新增或者删除责任。
    • 增加新的请求处理类很方便。
  • 缺点

    • 不能保证请求一定被接收。
    • 系统性能将受到一定影响,而且在进行代码调试时不太方便,可能会造成循环调用。
    • 可能不容易观察运行时的特征,有碍于除错。

相关文章

网友评论

      本文标题:二十九、职责连模式

      本文链接:https://www.haomeiwen.com/subject/glqssxtx.html