Aha!设计模式(74)-职责链模式(2)

适用性
 

职责链模式适用于以下情况:

•有多个对象可以处理一个请求,哪个对象处理该请求由对象自己决定。

•某个对象在处理请求的同时,也可以决定是否向后续的对象传递该请求。

 

结构

 

Aha!设计模式(74)-职责链模式(2)

 

参与者


• Handler
— 定义一个处理请求的接口。
— 管理后继节点(多个节点级联之后形成后继链条)
• ConcreteHandler
— 可以选择是否处理收到的请求。
— 可以选择是否将请求传递给后继者。
— 一般来讲处理和向后续传递是互斥的,但这并不是职责链本身的要求。

• Client

—请求的提出者。

 

一种可能的对象结构如下图:

 

Aha!设计模式(74)-职责链模式(2)

需要注意的是:实际的应用中,只要请求的传播途径形成链式结构即可。数据结构本身不一定如此。

 

协作

 

客户提出的请求沿着链状途径传播,链上的节点决定是处理还是向后传播该请求。

 

效果

 

请求的提出者不用关心哪个对象会处理请求,甚至不需要知道是否有对象会处理该请求。

是否处理某个请求由传播链上的节点决定。因此可以通过改变传播途径上节点的处理内容或者直接替换节点来改变请求的处理过程。而且无论哪种方式都可以在程序运行时完成。

 

虽然职责链模式可以极大地提高请求处理的灵活性,但是这种灵活性的反面是就是不确定性。客户在发出请求的时候甚至不知道是否有对象会处理该请求。如果某些请求必须要处理,就需要在生成数据结构时保证这一点。当然了,实际上是否有对象处理该请求是可以通过返回值来确认的。

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

Aha!设计模式(74)-职责链模式(2)