`

职责链模式Chain of Responsibility分离职责,动态组合

 
阅读更多
使多个对象都有机会处理请求,从而避免请求的发送者和接收者直接的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。

public abstract class Handler {
  protected Handler successor;
  public void setSuccessor(Handler successor) {
    this.successor = successor;
  }
  public abstract void handleRequest();
}

public class ConcreteHandler1 extends Handler {
  public void handleRequest() {
    boolean someCondition = false;
    if(someCondition) {
      System.out.println("");
    } else {
      if(this.successor != null) {
        this.successor.handleRequest();
      }
    }
  }
}

public class ConcreteHandler2 extends Handler {
  public void handleRequest() {
    boolean someCondition = false;
    if(someCondition) {
      System.out.println("");
    } else {
      if(this.successor != null) {
        this.successor.handleRequest();
      }
    }
  }
}

客户端代码:
Handler h1 = new ConcreteHandler1();
Handler h2 = new ConcreteHandler2();

h1.setSuccessor(h2);
h1.handleRequest();

要注意在标准的职责链模式中,只要有对象处理了请求,这个请求就到此为止,不再被传递和处理了。

Web应用开发中的过滤器Filter,就类似于一个功能链,每个过滤负责自己的处理,然后转交给下一个过滤器,直到把所有的过滤器都走完,最后进入到Servlet中进行处理。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics