(08)责任链模式
概念
责任链中,每个层级都有自己的上一个层级,当自己处理不了时,把任务丢给上级处理。
责任链有点类似于Http请求的转发功能。用户只需要关注直接和自己对接的人,无关心后边具体的流程
- 张三找A借100块钱,A自己刚好身上有100块,于是A就借给了张三。下次张三又来找A借10万块钱,由于A没有那么多钱,于是A找B借了10万块钱,A再把10万借给张三。
- 张三只关注和A借钱,至于A如何拿到的钱张三是无感知的,这就是责任链模式。
实现方式
/**
* 责任链
*/
public class Demo {
public static void main(String[] args) {
Handler handler = getHandler();
handler.process(100);
handler.process(10_0000);
}
public static Handler getHandler() {
PersonA a = new PersonA();
PersonB b = new PersonB();
// 设置处理人层级关系
a.setNextHandler(b);
// 返回最初始的层级
return a;
}
}
// 处理人接口。每个具体的处理人都要实现该接口
abstract class Handler {
Handler nextHandler;
// 每个具体的处理人都要保存它的上级
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void process(int money);
}
// 具体处理人A
class PersonA extends Handler {
@Override
public void process(int money) {
if (money <= 100) {
System.out.println("张三找A借钱:" + money);
} else {
nextHandler.process(money);
}
}
}
// 具体处理人B
class PersonB extends Handler {
@Override
public void process(int money) {
System.out.println("张三找A借钱,A又找到B借钱:" + money);
}
}
张三找A借钱:100
张三找A借钱,A又找到B借钱:100000