<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                16.2 責任鏈模式的定義 責任鏈模式定義如下: Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request.Chain the receiving objects and pass the request along the chain until an object handles it.(使多個對象都有機會處理請求,從而避免了請求的發送者和接受者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,直到有對象處理它為止。) 責任鏈模式的重點是在“鏈”上,由一條鏈去處理相似的請求在鏈中決定誰來處理這個請求,并返回相應的結果,其通用類圖如圖16-4所示。 ![](https://box.kancloud.cn/2016-08-14_57b00364dfa82.jpg) 圖16-4 責任鏈模式通用類圖 責任鏈模式的核心在“鏈”上,“鏈”是由多個處理者ConcreteHandler組成的,我們先來看抽象Handler類,如代碼清單16-14所示。 代碼清單16-14 抽象處理者 public?abstract?class?Handler?{ ?????private?Handler?nextHandler; ?????//每個處理者都必須對請求做出處理 ?????public?final?Response?handleMessage(Request?request){ ?????????????Response?response?=?null;?? ?????????????//判斷是否是自己的處理級別 ?????????????if(this.getHandlerLevel().equals(request.getRequestLevel())){ ????????????????????response?=?this.echo(request); ?????????????}else{??//不屬于自己的處理級別 ????????????????????//判斷是否有下一個處理者 ????????????????????if(this.nextHandler?!=?null){ ????????????????????????????response?=?this.nextHandler.handleMessage(request); ????????????????????}else{ ????????????????????????????//沒有適當的處理者,業務自行處理 ????????????????????} ?????????????} ?????????????return?response; ?????} ?????//設置下一個處理者是誰 ?????public?void?setNext(Handler?_handler){ ?????????????this.nextHandler?=?_handler; ?????} ?????//每個處理者都有一個處理級別 ?????protected?abstract?Level?getHandlerLevel(); ?????//每個處理者都必須實現處理任務 ?????protected?abstract?Response?echo(Request?request); } 抽象的處理者實現三個職責:一是定義一個請求的處理方法handleMessage,唯一對外開放的方法;二是定義一個鏈的編排方法setNext,設置下一個處理者;三是定義了具體的請求者必須實現的兩個方法:定義自己能夠處理的級別getHandlerLevel和具體的處理任務echo。 注意 在責任鏈模式中一個請求發送到鏈中后,前一節點消費部分消息,然后交由后續節點繼續處理,最終可以有處理結果也可以沒有處理結果,讀者可以不用理會什么純的、不純的責任鏈模式。同時,請讀者注意handlerMessage方法前的final關鍵字,可以閱讀第10章的模板方法模式。 我們定義三個具體的處理者,以便可以組成一個鏈,如代碼清單16-15所示。 代碼清單16-15 具體處理者 public?class?ConcreteHandler1?extends?Handler?{ ?????//定義自己的處理邏輯 ?????protected?Response?echo(Request?request)?{ ?????????????//完成處理邏輯 ?????????????return?null; ?????} ?????//設置自己的處理級別 ?????protected?Level?getHandlerLevel()?{ ?????????????//設置自己的處理級別 ?????????????return?null; ?????} } public?class?ConcreteHandler2?extends?Handler?{ ?????//定義自己的處理邏輯 ?????protected?Response?echo(Request?request)?{ ?????????????//完成處理邏輯 ?????????????return?null; ?????} ?????//設置自己的處理級別 ?????protected?Level?getHandlerLevel()?{ ?????????????//設置自己的處理級別 ?????????????return?null; ?????} } public?class?ConcreteHandler3?extends?Handler?{ ?????//定義自己的處理邏輯 ?????protected?Response?echo(Request?request)?{ ?????????????//完成處理邏輯 ?????????????return?null; ?????} ?????//設置自己的處理級別 ?????protected?Level?getHandlerLevel()?{ ?????????????//設置自己的處理級別 ?????????????return?null; ?????} } 在處理者中涉及三個類:Level類負責定義請求和處理級別,Request類負責封裝請求,Response負責封裝鏈中返回的結果,該三個類都需要根據業務產生,讀者可以在實際應用中完成相關的業務填充,其框架代碼如代碼清單16-16所示。 代碼清單16-16 模式中有關框架代碼 public?class?Level?{ ?????//定義一個請求和處理等級 } public?class?Request?{ ?????//請求的等級 ?????public?Level?getRequestLevel(){ ?????????????return?null; ?????} } public?class?Response?{ ?????//處理者返回的數據 } 在場景類或高層模塊中對鏈進行組裝,并傳遞請求,返回結果,如代碼清單16-17所示。 代碼清單16-17 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//聲明所有的處理節點 ?????????????Handler?handler1?=?new?ConcreteHandler1(); ?????????????Handler?handler2?=?new?ConcreteHandler2(); ?????????????Handler?handler3?=?new?ConcreteHandler3(); ?????????????//設置鏈中的階段順序1-->2-->3 ?????????????handler1.setNext(handler2); ?????????????handler2.setNext(handler3); ?????????????//提交請求,返回結果 ?????????????Response?response?=?handler1.handlerMessage(new?Request()); ?????} } 在實際應用中,一般會有一個封裝類對責任模式進行封裝,也就是替代Client類,直接返回鏈中的第一個處理者,具體鏈的設置不需要高層次模塊關系,這樣,更簡化了高層次模塊的調用,減少模塊間的耦合,提高系統的靈活性。
                  <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>

                              哎呀哎呀视频在线观看