标签: 设计模式
简介
责任链模式是行为型模式。
为请求创建了一个接收者对象的链。每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止(不一定有)。
应用
Struts2的拦截器(Interceptor),jsp servlet的过滤器(Filter)。
优点
发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
UML类图
角色
抽象处理者(Handler):定义一个处理请求的接口,和一个后继处理者。
具体处理者(ConcreteHandler): 注入一个后继处理者。首先处理它所负责的请求,如果可以处理请求则处理,否则将该请求转给他的后继处理者。
客户类(Client):向一个链上的具体处理者ConcreteHandler对象提交请求。
纯的与不纯的责任链模式
一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,二是把责任推给后继。不允许出现某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。
一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。允许某一个具体处理者对象在承担了一部分责任后又把责任向下传的情况。
纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现。