责任链模式---行为型

使用场景:

 (1)如果有多个对象可以处理同一个请求,但是具体由哪个对象来处理该请求,是运行时刻动态确定的。这种情况可以使用职责链模式,把处理请求的对象实现成为职责对象,然后把它们构成一个职责链,当请求在这个链中传递的时候,具体由哪个职责对象来处理,会在运行时动态判断。

(2)如果你想在不明确指定接收者的情况下,向多个对象中的其中一个提交请求的话,可以使用职责链模式。职责链模式实现了请求者和接收者之间的解耦,请求者不需要知道究竟是哪一个接收者对象来处理了请求。

(3)如果想要动态指定处理一个请求的对象集合,可以使用职责链模式。职责链模式能动态地构建职责链,也就是动态地来决定到底哪些职责对象来参与到处理请求中来,相当于是动态地指定了处理一个请求的职责对象集合。

3 相关模式

(1)职贵链模式和组合模式

    这两个模式可以组合使用。可以把职责对象通过组合模式来组合,这样可以通过组合对象自动递归地向上调用,由父组件作为子组件的后继,从而形成链。这也就是前面提到过的使用外部已有的链接,这种情况在客户端使用的时候,就不用再构造链了,虽然不构造链,但是需要构造组合对象树,是一样的。

(2)职责链模式和装饰模式

    这两个模式相似,从某个角度讲,可以相互模拟实现对方的功能装饰模式能够动态地给被裝饰对象添加功能,要求装饰器对象和被装饰的对象实现相同的接口。而职贵链模式可以实现动态的职责组合,标准的功能是有个对象处理就结束,但是如果处理完本职贵不急于结東,而是继线向下传递请求,那么其功能就和装饰模式的功能差不多了,每个职责对象就类似于装饰器,可以实现某种功能。而且两个模式的本质也相似,都需要在运行期间动态组合,装饰模式是动态组合装饰器,而职贵链是动态组合处理请求的职责对象的链但是从标准的设计模式上来讲,这两个模式还是有较大区别的,这点要注意。首先是目的不同,装饰模式是要实现透明的为对象添加功能,而职贵链模式是要实现发送者和接收者解耦;另外一个,装饰模式是无限递归调用的,可以有任意多个对象来装饰功能,但是职贵链模式是有一个处理就结束。

(3)职责链模式和策略模式

    这两个模式可以组合使用。这两个模式有相似之处,如果把职贵链简化到直接就能选择到相应的处理对象那就跟策略模式的选择差不多,因此可以用职责链来模拟策略模式的功能。只是如果把职责链简化到这个地步,也就不存在链了,也就称不上是职责链了。两个模式可以组合使用,可以在职责链模式的某个职责实现的时候,使用策略模式来选择具体的实现,同样也可以在策略模式的某个策略实现中,使用职贵链模式来实现功能处理。同理职责链模式也可以和状态模式组合使用。

0

猜你喜欢

转载自www.cnblogs.com/youngao/p/11401296.html