责任链模式

什么是责任链?它的原理是什么?

将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。

以上定义来自《设计模式之美》

图解:

 

 

 

  • 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根据自己的职责处理着自己相关的业务,这就是责任链。


 

posted @ 2021-05-25 11:03  多多-小希  阅读(67)  评论(0)    收藏  举报