<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 功能強大 支持多語言、二開方便! 廣告
                責任鏈模式(ChainOfResponsibility):有多個對象,每個對象持有下一個對象的引用,形成一條鏈,請求在這條鏈上傳遞,直到某一對象決定處理該請求,但是發出者并不清楚最終哪個對象會處理該請求。 ##一、uml建模: ![](https://box.kancloud.cn/2016-02-19_56c7196eca002.jpg) ##二、代碼實現 ~~~ /** * 責任鏈模式:有多個對象,每個對象持有下一個對象的引用,形成一條鏈, * * 請求在這條鏈上傳遞,直到某一對象決定處理該請求, * * 但是發出者并不清楚最終哪個對象會處理該請求。 */ interface Handler { public void operator(); } /** * 這里單獨對Handler進行封裝,方便修改引用對象 */ abstract class AbstractHandler implements Handler { private Handler handler; public Handler getHandler() { return handler; } public void setHandler(Handler handler) { this.handler = handler; } } class MyHandler extends AbstractHandler implements Handler { private String name; public MyHandler(String name) { this.name = name; } @Override public void operator() { if (getHandler() != null) { System.out.print(name + ",將BUG交給——>"); /** * 這里是關鍵。【注意1】這里不是遞歸哦~ * * 遞歸:A(operator)——>A(operator)——>A(operator) * * 責任鏈:A(operator)——>B(operator)——>C(operator) */ getHandler().operator(); } else { System.out.println(name + "處理BUG...\n"); } } } /** * 客戶端測試類 * * @author Leo */ public class Test { public static void main(String[] args) { MyHandler handler1 = new MyHandler("技術總監"); MyHandler handler2 = new MyHandler("項目經理"); MyHandler handler3 = new MyHandler("程序員"); /** * 如果沒有下家,將會自行處理 * * 打印結果:技術總監處理BUG... */ handler1.operator(); /** * 只要有下家,就傳給下家處理 * * 下面的打印結果:技術總監,將BUG交給——>項目經理,將BUG交給——>程序員處理BUG... * * 就這樣,原本是技術總監自行處理的BUG,現在一層一層的把責任推給了程序員去處理 */ handler1.setHandler(handler2); handler2.setHandler(handler3); /** * 透過打印結果可以知道:MyHandler實例化后將生成一系列相互持有的對象(handler),構成一條鏈。 */ handler1.operator(); /** * 【注意2】責任鏈不是鏈表:鏈表有個頭結點,咱每次必須通過頭結點才能訪問后面的節點 * * 而責任鏈它可以從頭訪問,也可以從中間開始訪問,如:handler2.operator(); */ } } ~~~ ##三、總結 1、責任鏈模式可以實現,在隱瞞客戶端(不知道具體處理的人是誰)的情況下,對系統進行動態的調整。 2、鏈接上的請求可以是一條鏈,可以是一個樹,還可以是一個環,模式本身不約束這個,需要自己去實現,同時,在一個時刻,命令只允許由一個對象傳給另一個對象,而不允許傳給多個對象。
                  <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>

                              哎呀哎呀视频在线观看