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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 請求的鏈式處理——職責鏈模式(二) 16.2 職責鏈模式概述 很多情況下,在一個軟件系統中可以處理某個請求的對象不止一個,例如SCM系統中的采購單審批,主任、副董事長、董事長和董事會都可以處理采購單,他們可以構成一條處理采購單的鏈式結構,采購單沿著這條鏈進行傳遞,這條鏈就稱為職責鏈。職責鏈可以是一條直線、一個環或者一個樹形結構,最常見的職責鏈是直線型,即沿著一條單向的鏈來傳遞請求。鏈上的每一個對象都是請求處理者,職責鏈模式可以將請求的處理者組織成一條鏈,并讓請求沿著鏈傳遞,由鏈上的處理者對請求進行相應的處理,客戶端無須關心請求的處理細節以及請求的傳遞,只需將請求發送到鏈上即可,實現請求發送者和請求處理者解耦。 職責鏈模式定義如下: 職責鏈模式(Chain of Responsibility Pattern):避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,并且沿著這條鏈傳遞請求,直到有對象處理它為止。職責鏈模式是一種對象行為型模式。 職責鏈模式結構的核心在于引入了一個抽象處理者。職責鏈模式結構如圖16-2所示: ![](http://my.csdn.net/uploads/201204/02/1333307613_2407.gif) 在職責鏈模式結構圖中包含如下幾個角色: ● Handler(抽象處理者):它定義了一個處理請求的接口,一般設計為抽象類,由于不同的具體處理者處理請求的方式不同,因此在其中定義了抽象請求處理方法。因為每一個處理者的下家還是一個處理者,因此在抽象處理者中定義了一個抽象處理者類型的對象(如結構圖中的successor),作為其對下家的引用。通過該引用,處理者可以連成一條鏈。 ● ConcreteHandler(具體處理者):它是抽象處理者的子類,可以處理用戶請求,在具體處理者類中實現了抽象處理者中定義的抽象請求處理方法,在處理請求之前需要進行判斷,看是否有相應的處理權限,如果可以處理請求就處理它,否則將請求轉發給后繼者;在具體處理者中可以訪問鏈中下一個對象,以便請求的轉發。 在職責鏈模式里,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。發出這個請求的客戶端并不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織鏈和分配責任。 職責鏈模式的核心在于抽象處理者類的設計,抽象處理者的典型代碼如下所示: ``` abstract class Handler { //維持對下家的引用 protected Handler successor; public void setSuccessor(Handler successor) { this.successor=successor; } public abstract void handleRequest(String request); } ``` 上述代碼中,抽象處理者類定義了對下家的引用對象,以便將請求轉發給下家,該對象的訪問符可設為protected,在其子類中可以使用。在抽象處理者類中聲明了抽象的請求處理方法,具體實現交由子類完成。 具體處理者是抽象處理者的子類,它具有兩大作用:第一是處理請求,不同的具體處理者以不同的形式實現抽象請求處理方法handleRequest();第二是轉發請求,如果該請求超出了當前處理者類的權限,可以將該請求轉發給下家。具體處理者類的典型代碼如下: ``` class ConcreteHandler extends Handler { public void handleRequest(String request) { if (請求滿足條件) { //處理請求 } else { this.successor.handleRequest(request); //轉發請求 } } } ``` 在具體處理類中通過對請求進行判斷可以做出相應的處理。 需要注意的是,職責鏈模式并不創建職責鏈,職責鏈的創建工作必須由系統的其他部分來完成,一般是在使用該職責鏈的客戶端中創建職責鏈。職責鏈模式降低了請求的發送端和接收端之間的耦合,使多個對象都有機會處理這個請求。 思考 如何在客戶端創建一條職責鏈?
                  <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>

                              哎呀哎呀视频在线观看