<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # 責任鏈模式 Chain of Responsibility Pattern,為請求創建了由接受者對象組成的鏈,通過這種模式發送的請求,可以對請求的發送者和接受者進行解耦。 同時在這種模式中每個接收者都包含對另外一個接收者的引用,使得如果當前接收者不能處理,可以將請求傳遞給下一個接收者處理。例如在Netty的入站處理器的pipeline中,每個處理器需要調用ctx.fireChannelRead(msg)將msg移交給下一個處理器處理。 責任鏈模式適用于解決當處理消息的時候有很多道“過濾”程序的場景,例如Java Web中的攔截器、Tomcat對Encoding的處理、JS的事件冒泡、Netty中的出入站處理器。 &nbsp; ## 組成 1. Handler:定義處理請求的接口,并且實現其后繼鏈節點(successor)。 2. handlerRequest:定義處理請求的方法,每個具體的Handler接口都需要重寫handlerRequest方法來實現特點的處理。 **實現** 1. 定義Handler接口 ~~~ public abstract class Handler { // 后繼處理鏈 protected Handler successor; public Handler(Handler successor) { this.successor = successor; } // 處理請求的方法 protected abstract void handleRequest(Request request); } ~~~ 2. 定義具體的Handler實現類 ~~~ public class ConcreteHandler1 extends Handler { public ConcreteHandler1(Handler successor) { super(successor); } @Override protected void handleRequest(Request request) { if (request.getType() == RequestType.TYPE1) { System.out.println(request.getName() + " is handle by ConcreteHandler1"); return; } if (successor != null) { // 交由下一個處理器處理 successor.handleRequest(request); } } } ~~~ &nbsp; &nbsp; JDK中實現責任鏈模式的代碼: * [java.util.logging.Logger#log()](http://docs.oracle.com/javase/8/docs/api/java/util/logging/Logger.html#log%28java.util.logging.Level,%20java.lang.String%29) * [Apache Commons Chain](https://commons.apache.org/proper/commons-chain/index.html) * [javax.servlet.Filter#doFilter()](http://docs.oracle.com/javaee/7/api/javax/servlet/Filter.html#doFilter-javax.servlet.ServletRequest-javax.servlet.ServletResponse-javax.servlet.FilterChain-)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看