责任链模式
定义
顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。
在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
类图
Handler
定义了处理请求的接口。它知道下一个“处理者”是谁,如果自己无法处理请求,它会将请求转给“下一个处理者”,当然,“下一个”处理者也是Handler角色。
ConcreteHandler
是处理具体请求的角色。
Client
是想第一个ConcreteHandler发送请求的角色。
示例
类图
Trouble
1 | public class Trouble { |
LimitSupport
1 | public class LimitSupport extends Support { |
NoSupport
1 | public class NoSupport extends Support { |
OddSupport
1 | public class OddSupport extends Support { |
SpecialSupport
1 | public class SpecialSupport extends Support { |
Support
1 | public abstract class Support { |
Main
1 | public class Main { |
总结
责任链模式最大的优点在于它弱化了发出请求的人和处理请求的人之间的关系。Client角色向第一个ConcreteHandler发出请求,然后请求会在责任链中传播,知道某个ConcreteHandler处理该请求。
如果不使用该模式,就必须由某个伟大的角色知道“谁应该处理什么请求”,这有点类似中央集权制。而让“发出请求的人”知道“谁应该处理该请求”并不明智,因为如果发出请求的人不得不知道处理请求的人各自的责任分担情况,就会降低其作为可复用组件的独立性。
使用责任链模式可以根据情况动态地重组组织链。