<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國際加速解決方案。 廣告
                **定義**:將一個請求封裝成一個對象,從而讓你使用不同的請求把客戶端參數化,對請求排隊或者記錄請求日志, 可以提供命令的撤銷和恢復功能。 ## 命令模式的通用模式: ![](https://box.kancloud.cn/2016-06-06_5755340a10f29.jpg) **該類圖中** Receive接受者角色 ---|該角色就是干活的角色,命令傳遞到這里應該是被執行的 Command命令角色 ---|需要執行的所有命令都在這里聲明 Invoker調用者角色 ---|接收命令,并執行命令。 ~~~ public class CommandTest { public static void main(String[] args) { //首先聲明調用者Invoker MyInvoker invoker = new MyInvoker(); //聲明命令的接收者 Receiver receiver1 = new ConcreteReceive1(); //聲明命令 Command command1 = new ConcreteCommand1(receiver1); invoker.setCommand(command1); invoker.action(); } } abstract class Receiver{ //抽象的接收者,定義具體接受者要實現的方法 public abstract void doSomething(); } class ConcreteReceive1 extends Receiver{ @Override public void doSomething() { System.out.println("接收者1號,需要執行的方法...."); } } class ConcreteReceiver2 extends Receiver{ @Override public void doSomething() { System.out.println("接收者2號,需要執行的方法..."); } } abstract class Command{ //抽象的命令類,定義要執行的命令,具體命令主體由子類來完成。 public abstract void execute(); } class ConcreteCommand1 extends Command{ private Receiver receiver; //用構造函數來傳遞,具體的接收者是誰。 public ConcreteCommand1(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { //讓接收者去執行具體的方法。 this.receiver.doSomething(); } } class ConcreteCommand2 extends Command{ private Receiver receiver; //用構造函數來傳遞,具體的接收者是誰。 public ConcreteCommand2(Receiver receiver) { this.receiver = receiver; } @Override public void execute() { //讓接收者去執行具體的方法。 this.receiver.doSomething(); } } class MyInvoker{ private Command command; //調用者角色,去決定具體的接收者執行什么命令 public void setCommand(Command command) { this.command = command; } public void action() { this.command.execute(); } } ~~~ ## 一個例子: 一個項目組分為需求組(require),美工組,編碼組,三部分。客戶在進行修改需求、美工時需要對各個部門進行交互。 但是這樣的做法對客戶來說十分不便捷。因此需要一個中介者替客戶傳達他對各項目組的需求。 他將客戶一系列的命令(Command)傳達給不同的項目小組。 ![](https://box.kancloud.cn/2016-06-06_5755340a2ec27.jpg) ~~~ public class CommandEx { public static void main(String[] args) { //首選創建一個指揮者實體 Invoker invok = new Invoker(); //命令實體要求添加一個需求 CommandWork cw1 = new AddRequire(); CommandWork cw2 = new DelPage(); //指揮者,設置好命令 invok.addCommand(cw1); invok.addCommand(cw2); //指揮者去傳達命令。 invok.action(); } } abstract class GroupWork{ /** * 抽象的項目工作類,定義需要的方法供實現類去執行。 */ //找具體的執行者 public abstract void find(); //要求添加功能 public abstract void add(); //要求刪除功能 public abstract void delete(); //要求修改功能 public abstract void change(); //要求制定出具體的計劃 public abstract void plan(); } /** * 美工組,執行任務 * @author admin * */ class PageGroup extends GroupWork{ @Override public void find() { System.out.println("找到美工組...."); } @Override public void add() { System.out.println("要求美工組添加一張圖片..."); } @Override public void delete() { System.out.println("要求美工組刪除一張圖片...."); } @Override public void change() { System.out.println("要求美工組修改這張頁面...."); } @Override public void plan() { System.out.println("要求美工組制定出具體計劃...."); } } /* * 編碼組,執行任務 */ class CodeGroup extends GroupWork{ @Override public void find() { System.out.println("找到程序員...."); } @Override public void add() { System.out.println("要求程序員添加一個絢麗的功能..."); } @Override public void delete() { System.out.println("要求程序員刪除有bug的功能...."); } @Override public void change() { System.out.println("要求程序員修改具體功能...."); } @Override public void plan() { System.out.println("要求程序員制定出詳細的計劃...."); } } /** * 需求組執行任務。 * @author admin * */ class requireGroup extends GroupWork{ @Override public void find() { System.out.println("找到需求組...."); } @Override public void add() { System.out.println("要求需求組添加一項功能..."); } @Override public void delete() { System.out.println("要求需求組刪除項功能...."); } @Override public void change() { System.out.println("要求美需求組修改一項...."); } @Override public void plan() { System.out.println("要求需求組制定詳細的需求分析...."); } } abstract class CommandWork{ /** * 模擬客戶提出要求,并且讓具體的項目組去執行任務。 */ //這里已經知道這三類項目小組,所以在抽象類中直接實例化 GroupWork rg = new requireGroup(); GroupWork pg = new PageGroup(); GroupWork cg = new CodeGroup(); public abstract void executeWork(); } class AddRequire extends CommandWork{ @Override public void executeWork() { //找到需求組 super.rg.find(); //添加一個功能 super.rg.add(); //指定具體計劃 super.rg.plan(); } } class DelPage extends CommandWork{ @Override public void executeWork() { //找到需求組 super.pg.find(); //添加一個功能 super.pg.delete(); //指定具體計劃 super.rg.plan(); } } class Invoker{ /** * 命令的調用者,通過該類,向項目組傳達客戶的命令。 * 相當于項目經理。 */ private ArrayList<CommandWork> command_list = new ArrayList<CommandWork>(); public void addCommand(CommandWork command){ this.command_list.add(command); } public void action(){ if(command_list.size()>0){ for(CommandWork cw : command_list){ cw.executeWork(); } } /*//接收到命令,就去轉達 this.cw.executeWork();*/ } } ~~~ **命令模式的優點:** * 類間解耦 * 可擴展性 * 命令模式結合其他模式更優秀
                  <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>

                              哎呀哎呀视频在线观看