责任链模式

责任链模式

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

UML类图

责任链模式_第1张图片

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

代码实现

Handler类

  
  package com.lms.filterchain;
  
  /**
   * 

文件描述: 责任链模式处理器

* * @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;
  
  /**
   * 

文件描述: 具体处理器1

* * @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;
  
  /**
   * 

文件描述: 具体处理器2

* * @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;
  
  /**
   * 

文件描述: 具体处理器3

* * @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);
      }
  }

你可能感兴趣的:(设计模式)