版权声明:本文为博主原创,未经博主允许不得转载。 https://blog.csdn.net/weixin_36904568/article/details/90072234
1. 定义
很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。责任链可能是一条直线、一个环链或者一个树结构的一部分。
2. 使用
- 抽象处理者:定义出一个处理请求的接口
- 具体处理者:接到请求后,可以将请求处理掉,或者将请求传给下一个
(1)处理器
package ChainOfResponsibilityPattern;
/**
* 抽象处理器
*/
public abstract class Handler {
//下一个对象
private Handler next;
//处理业务
public abstract void handler(String text);
public Handler getNext() {
return next;
}
public void setNext(Handler next) {
this.next = next;
}
}
package ChainOfResponsibilityPattern;
/**
* 具体处理类
*/
public class HandlerA extends Handler {
@Override
public void handler(String text) {
//可以处理
if (text.startsWith("A"))
System.out.println("开始对A类业务的处理");
//不可以处理
else{
Handler handler = getNext();
if (handler == null){
System.out.println("已经没有对象了");
return;
}
//传递给下一个对象
else
handler.handler(text);
}
}
}
package ChainOfResponsibilityPattern;
/**
* 具体处理类
*/
public class HandlerB extends Handler {
@Override
public void handler(String text) {
//可以处理
if (text.startsWith("B"))
System.out.println("开始对B类业务的处理");
//不可以处理
else{
Handler handler = getNext();
if (handler == null){
System.out.println("已经没有对象了");
return;
}
//传递给下一个对象
else
handler.handler(text);
}
}
}
(2)测试
package ChainOfResponsibilityPattern;
public class Test {
public static void main(String[] args) {
Handler handlerA = new HandlerA();
Handler handlerB = new HandlerB();
handlerA.setNext(handlerB);
System.out.println("处理A型事务");
handlerA.handler("A");
System.out.println("处理B型事务");
handlerA.handler("B");
System.out.println("处理C型事务");
handlerA.handler("C");
}
}
3. 特点
- 请求的发送者和接受者解耦
- 系统可以在不影响客户端的情况下重新组织和分配责任(对责任链进行修改)
- 不容易观察运行时的特征
- 并不保证请求一定会被执行