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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                15.2 命令模式的定義 命令模式是一個高內聚的模式,其定義為:Encapsulate a request as an object,thereby letting you parameterize clients with different requests,queue or log requests,and support undoable operations.(將一個請求封裝成一個對象,從而讓你使用不同的請求把客戶端參數化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復功能。) 命令模式的通用類圖如圖15-4所示。 ![](https://box.kancloud.cn/2016-08-14_57b003647f18e.jpg) 圖15-4 命令模式的通用類圖 在該類圖中,我們看到三個角色: ● Receive接收者角色 該角色就是干活的角色,命令傳遞到這里是應該被執行的,具體到我們上面的例子中就是Group的三個實現類。 ● Command命令角色 需要執行的所有命令都在這里聲明。 ● Invoker調用者角色 接收到命令,并執行命令。在例子中,我(項目經理)就是這個角色。 命令模式比較簡單,但是在項目中非常頻繁地使用,因為它的封裝性非常好,把請求方(Invoker)和執行方(Receiver)分開了,擴展性也有很好的保障,通用代碼比較簡單。我們先閱讀一下Receiver類,如代碼清單15-13所示。 代碼清單15-13 通用Receiver類 public?abstract?class?Receiver?{ ?????//抽象接收者,定義每個接收者都必須完成的業務 ?????public?abstract?void?doSomething(); } 很奇怪,為什么Receiver是一個抽象類?那是因為接收者可以有多個,有多個就需要定義一個所有特性的抽象集合——抽象的接收者,其具體的接收者如代碼清單15-14所示。 代碼清單15-14 具體的Receiver類 public?class?ConcreteReciver1?extends?Receiver{???? ?????//每個接收者都必須處理一定的業務邏輯 ?????public?void?doSomething(){ ?????} } public?class?ConcreteReciver2?extends?Receiver{? ?????//每個接收者都必須處理一定的業務邏輯 ?????public?void?doSomething(){ ?????} } 接收者可以是N個,這要依賴業務的具體定義。命令角色是命令模式的核心,其抽象的命令類如代碼清單15-15所示。 代碼清單15-15 抽象的Command類 public?abstract?class?Command?{ ?????//每個命令類都必須有一個執行命令的方法 ?????public?abstract?void?execute(); } 根據環境的需求,具體的命令類也可以有N個,其實現類如代碼清單15-16所示。 代碼清單15-16 具體的Command類 public?class?ConcreteCommand1?extends?Command?{ ?????//對哪個Receiver類進行命令處理 ?????private?Receiver?receiver;? ?????//構造函數傳遞接收者 ?????public?ConcreteCommand1(Receiver?_receiver){ ?????????????this.receiver?=?_receiver; ?????} ?????//必須實現一個命令 ?????public?void?execute()?{ ?????????????//業務處理 ?????????????this.receiver.doSomething(); ?????} } public?class?ConcreteCommand2?extends?Command?{ ?????//哪個Receiver類進行命令處理 ?????private?Receiver?receiver; ?????//構造函數傳遞接收者 ?????public?ConcreteCommand2(Receiver?_receiver){ ?????????????this.receiver?=?_receiver; ?????} ?????//必須實現一個命令 ?????public?void?execute()?{ ?????????????//業務處理 ?????????????this.receiver.doSomething(); ?????} } 定義了兩個具體的命令類,讀者可以在實際應用中擴展該命令類。在每個命令類中,通過構造函數定義了該命令是針對哪一個接收者發出的,定義一個命令接收的主體。調用者非常簡單,僅實現命令的傳遞,如代碼清單15-17所示。 代碼清單15-17 調用者Invoker類 public?class?Invoker?{ ?????private?Command?command; ?????//受氣包,接受命令 ?????public?void?setCommand(Command?_command){ ?????????????this.command?=?_command; ?????} ?????//執行命令 ?????public?void?action(){ ?????????????this.command.execute(); ?????} } 調用者就像是一個受氣包,不管什么命令,都要接收、執行!那我們來看高層模塊如何調用命令模式,如代碼清單15-18所示。 代碼清單15-18 場景類 public?class?Client?{ ?????public?static?void?main(String[]?args)?{ ?????????????//首先聲明調用者Invoker ?????????????Invoker?invoker?=?new?Invoker(); ?????????????//定義接收者 ?????????????Receiver?receiver?=?new?ConcreteReciver1(); ?????????????//定義一個發送給接收者的命令 ?????????????Command?command?=?new?ConcreteCommand1(receiver); ?????????????//把命令交給調用者去執行 ?????????????invoker.setCommand(command); ?????????????invoker.action(); ?????} } 一個完整的命令模式就此完成,讀者可以在此基礎上進行擴展。
                  <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>

                              哎呀哎呀视频在线观看