责任链模式

责任链模式

责任链模式将请求在一个对象处理器链上传递,直到某个对象处理这个请求成功为止。该模式简化了请求的处理,每个对象处理器仅负责自己的单一职责,因此责任链模式也称为职责链模式。

UML类图


其中Handler是一个抽象类,它有一个successor字段,该字段指向职责链下一个处理器,方法handlerRequest处理请求。看下代码实现

代码实现

Handler类

  
  package com.lms.filterchain;
  
  /**
   * <p>文件描述: 责任链模式处理器</p>
   *
   * @Author luanmousheng
   * @Date 18/4/22 下午12:36
  */
  public abstract class Handler {
  
      //责任链上的下一个处理者
      protected Handler successor;
  
      public void setSuccessor(Handler successor) {
          this.successor = successor;
      }
  
      public abstract void handlerRequest(int request);
  
  }

ConcreteHandler1类

  
  package com.lms.filterchain;
  
  /**
   * <p>文件描述: 具体处理器1</p>
   *
   * @Author luanmousheng
   * @Date 18/4/22 下午1:13
  */
  public class ConcreteHandler1 extends Handler {
      @Override
      public void handlerRequest(int request) {
          if (request < 0) {
              System.out.println("handler1 process < 0 request");
              return;
          }
          super.successor.handlerRequest(request);
      }
  }

ConcreteHandler2类

  
  package com.lms.filterchain;
  
  /**
   * <p>文件描述: 具体处理器2</p>
   *
   * @Author luanmousheng
   * @Date 18/4/22 下午1:16
  */
  public class ConcreteHandler2 extends Handler {
      @Override
      public void handlerRequest(int request) {
          if (request >= 0 && request < 10) {
              System.out.println("handler2 process [0,10) request");
              return;
          }
          super.successor.handlerRequest(request);
      }
  }

ConcreteHandler3类

  
  package com.lms.filterchain;
  
  /**
   * <p>文件描述: 具体处理器3</p>
   *
   * @Author luanmousheng
   * @Date 18/4/22 下午1:16
  */
  public class ConcreteHandler3 extends Handler {
      @Override
      public void handlerRequest(int request) {
          if (request >= 10) {
              System.out.println("handler3 process [10,) request");
              return;
          }
          super.successor.handlerRequest(request);
      }
  }

FilterChainTest类

  
  package com.lms.filterchain;
  
  public class FilterChainTest {
  
      public static void main(String[] args) {
  
          Handler handler1 = new ConcreteHandler1();
          Handler handler2 = new ConcreteHandler2();
          Handler handler3 = new ConcreteHandler3();
          handler1.setSuccessor(handler2);
          handler2.setSuccessor(handler3);
  
          handler1.handlerRequest(12);
      }
  }

猜你喜欢

转载自blog.csdn.net/luanmousheng/article/details/80038216