责任链模式
什么是责任链?它的原理是什么?
将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。
以上定义来自《设计模式之美》
图解:

- Client(客户端):实例化一个处理器的链,在第一个链对象中调用handleRequest 方法。
- Handle(处理器):抽象类,提供给实际处理器继承然后实现handleRequst方法,处理请求
- ConcreteHandler(具体处理器):继承了handler的类,同时实现handleRequst方法,负责处理业务逻辑类,不同业务模块有不同的ConcreteHandler。
public abstract class Handler {
protected Handler handler;
public void setHandler(Handler handler) {
this.handler = handler;
}
public abstract void handlerRequest(int times);
}
public class FirstHandler extends Handler{
@Override
public void handlerRequest(int times) {
if(times == 1){
System.out.println("first times");
}
handler.handlerRequest(times);
}
}
public class SecondHandler extends Handler{
@Override
public void handlerRequest(int times) {
if(times == 2){
System.out.println("second times");
}
handler.handlerRequest(times);
}
}
public class ThirdHandler extends Handler{
@Override
public void handlerRequest(int times) {
if(times == 3){
System.out.println("third times,ahhhhh,最终的结果");
}
}
public static void main(String[] args) {
Handler handler1 = new FirstHandler();
Handler handler2 = new SecondHandler();
Handler handler3 = new ThirdHandler();
handler1.setHandler(handler2);
handler2.setHandler(handler3);
handler1.handlerRequest(1);
handler1.handlerRequest(2);
handler1.handlerRequest(3);
System.out.println("-----------下面是handler2---");
handler2.handlerRequest(1);
handler2.handlerRequest(2);
handler2.handlerRequest(3);
}
}

根据参数的不同,会调用不同的Handler去处理。对应的Handler根据自己的职责处理着自己相关的业务,这就是责任链。

浙公网安备 33010602011771号