<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 功能強大 支持多語言、二開方便! 廣告
                15.5 最佳實踐 各位讀者可能已經發覺了這樣的問題:在我們旅行社的例子中,我們的Receiver角色(也就是Group的三個實現類)并沒有暴露給Client,而在通用的類圖和源碼中卻出現了Client類對Receiver角色的依賴,這是為什么呢? 如果你發現了這個問題,則說明你閱讀得非常仔細,好習慣!每一個模式到實際應用的時候都有一些變形,命令模式的Receiver在實際應用中一般都會被封裝掉(除非非常必要,例如撤銷處理),那是因為在項目中:約定的優先級最高,每一個命令是對一個或多個Receiver的封裝,我們可以在項目中通過有意義的類名或命令名處理命令角色和接收者角色的耦合關系(這就是約定),減少高層模塊(Client類)對低層模塊(Receiver角色類)的依賴關系,提高系統整體的穩定性。因此,建議大家在實際的項目開發時采用封閉Receiver的方式(當然了,仁者見仁,智者見智),減少Client對Reciver的依賴,該方案只是對Commandd抽象類及其子類有一定的修改,Command類如代碼清單15-22所示。 代碼清單15-22 完美的Command類 public?abstract?class?Command?{ ?????//定義一個子類的全局共享變量 ?????protected?final?Receiver?receiver;? ?????//實現類必須定義一個接收者 ?????public?Command(Receiver?_receiver){ ?????????????this.receiver?=?_receiver; ?????}?? ?????//每個命令類都必須有一個執行命令的方法 ?????public?abstract?void?execute(); } 在Command父類中聲明了一個接收者,通過構造函數約定每個具體命令都必須指定接收者,當然根據開發場景要求也可以有多個接收者,那就需要用集合類型。我們來看具體命令,如代碼清單15-23所示。 代碼清單15-23 具體的命令 public?class?ConcreteCommand1?extends?Command?{ ?????//聲明自己的默認接收者 ?????public?ConcreteCommand1(){ ?????????????super(new?ConcreteReciver1()); ?????} ?????//設置新的接收者 ?????public?ConcreteCommand1(Receiver?_receiver){ ?????????????super(_receiver); ?????} ?????//每個具體的命令都必須實現一個命令 ?????public?void?execute()?{ ?????????????//業務處理 ?????????????super.receiver.doSomething(); ?????} } public?class?ConcreteCommand2?extends?Command?{ ?????//聲明自己的默認接收者 ?????public?ConcreteCommand2(){ ?????????????super(new?ConcreteReciver2()); ?????} ?????//設置新的接收者 ?????public?ConcreteCommand2(Receiver?_receiver){ ?????????????super(_receiver); ?????} ?????//每個具體的命令都必須實現一個命令 ?????public?void?execute()?{ ?????????????//業務處理 ?????????????super.receiver.doSomething(); ?????} } 這確實簡化了很多,每個命令完成單一的職責,而不是根據接收者的不同完成不同的職責。在高層模塊的調用時就不用考慮接收者是誰的問題,如代碼清單15-24所示。 代碼清單15-24 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//首先聲明調用者Invoker ?????????????Invoker?invoker?=?new?Invoker(); ?????????????//定義一個發送給接收者的命令 ?????????????Command?command?=?new?ConcreteCommand1(); ?????????????//把命令交給調用者去執行 ?????????????invoker.setCommand(command); ?????????????invoker.action(); ?????} } 高層次的模塊不需要知道接收者,Perfect!讀者可以在實際應用中采用該模式,看看威力如何。
                  <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>

                              哎呀哎呀视频在线观看