第六章 命令模式

定義

命令模式: 將“請求”封裝成對象,以便使用不同的請求、隊列或者日誌參數化其他對象。命令模式也支持可撤銷的操作。
優點: 命令模式可以將“動作的請求者”從“動作的執行者”對象中解耦。利用命令對象,把請求(執行者&其動作)封裝成一個特定對象。所以,如果每個Invoker都存儲一個命令對象,那麼當按鈕按下的時候,就可以請命令對象做相關的工作。Invoker並不需要知道工作內容是什麼,之要有個命令對象能和正確的對象溝通,把事情做好就可以了。

類圖

擴展

撤銷功能:

  1. ConcreteCommand提供和execute()方法相反的undo()方法;
  2. Invoker中添加一個新的實例變量,用來記錄最後被調用的命令;
  3. 如果ConreteCommand擁有多個狀態,那麼需要其添加一個prevState變量,用來記錄上次的狀態,供undo()使用。

MacroCommand(宏命令)

同時執行多個動作。

public class MacroCommand implements Command {
    Command[] commands;

    public MacroCommand(Command[] commands) {
        this.commands = commands;
    }

    public void execute() {
        for(int i = 0; i < commands.length; i++) {
            commands[i].execute();
        }
    }

    public void undo() {
        for(int i = 0; i < commands.length; i++) {
            commands[i].undo();
        }
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章