定义:
为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。
特点:
降低了对象之间的耦合度。(优点)
- 增强了系统的可扩展性。(优点)
- 增强了给对象指派职责的灵活性。(优点)
- 责任链简化了对象之间的连接。(优点)
- 不能保证每个请求一定被处理。(缺点)
对比较长的职责链,请求的处理可能涉及多个处理对象,系统性能将受到一定影响。(缺点)
通常适用场景:
有多个对象可以处理一个请求,哪个对象处理该请求由运行时刻自动确定。
- 可动态指定一组对象处理请求,或添加新的处理者。
在不明确指定请求处理者的情况下,向多个处理者中的一个提交请求。
demo代码:
抽象处理类和具体处理类 ```java public abstract class Handler{ private Handler handler;
public void setHandler(Handler handler){
this.handler=handler;
} public Handler getHandler(){
return handler;}
public abstract void process(String name); }
public class AHandler extends Handler{ @Override public void process(String name) { if(“A”.equals(name)){ System.out.println(“A处理”); } Optional.ofNullable(getHandler()).ifPresent(handler -> { System.out.println(“接着下一个处理”); handler.process(name); }); } } public class BHandler extends Handler{ @Override public void process(String name) { if(“B”.equals(name)){ System.out.println(“B处理”); } Optional.ofNullable(getHandler()).ifPresent(handler -> { System.out.println(“接着下一个处理”); handler.process(name); }); } }
- 测试
```java
public static void main(String[] args) {
AHandler a =new AHandler();
BHandler b =new BHandler();
a.setHandler(b);
a.process("B");
}
