91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

命令模式在Java宏命令與撤銷操作中的應用

發布時間:2024-09-29 10:54:30 來源:億速云 閱讀:89 作者:小樊 欄目:編程語言

命令模式(Command Pattern)是一種行為設計模式,它封裝了一個請求對象,從而讓你使用不同的請求把客戶端參數化,對請求排隊或者記錄請求日志,可以提供命令的撤銷和恢復功能。

在Java宏命令與撤銷操作中,命令模式可以被用來實現宏命令的記錄、撤銷和重做功能。下面是一個簡單的例子:

  1. 定義命令接口:
public interface Command {
    void execute();
    void undo();
}
  1. 定義具體命令類:
public class MacroCommand implements Command {
    private List<Command> commands;
    private int currentIndex;

    public MacroCommand(List<Command> commands) {
        this.commands = commands;
        this.currentIndex = -1;
    }

    @Override
    public void execute() {
        if (currentIndex < commands.size() - 1) {
            currentIndex++;
        }
        if (currentIndex >= 0) {
            commands.get(currentIndex).execute();
        }
    }

    @Override
    public void undo() {
        if (currentIndex > 0) {
            currentIndex--;
            commands.get(currentIndex).undo();
        }
    }
}

在這個例子中,MacroCommand 類實現了 Command 接口,它包含了一個命令列表和一個當前索引。execute() 方法會依次執行列表中的命令,undo() 方法會撤銷上一個執行的命令。

  1. 定義撤銷管理器類:
public class UndoManager {
    private Stack<Command> commandHistory;

    public UndoManager() {
        commandHistory = new Stack<>();
    }

    public void executeCommand(Command command) {
        command.execute();
        commandHistory.push(command);
    }

    public void undo() {
        if (!commandHistory.isEmpty()) {
            Command command = commandHistory.pop();
            command.undo();
        }
    }
}

在這個例子中,UndoManager 類使用了一個棧來保存執行的命令,executeCommand() 方法會執行命令并將其壓入棧中,undo() 方法會彈出棧頂的命令并撤銷它。

  1. 使用命令模式實現Java宏命令與撤銷操作:
public class Main {
    public static void main(String[] args) {
        List<Command> commands = new ArrayList<>();
        commands.add(new PrintCommand("Hello, world!"));
        commands.add(new PrintCommand("This is a macro command."));

        UndoManager undoManager = new UndoManager();
        MacroCommand macroCommand = new MacroCommand(commands);

        undoManager.executeCommand(macroCommand);
        undoManager.undo();
    }
}

class PrintCommand implements Command {
    private String message;

    public PrintCommand(String message) {
        this.message = message;
    }

    @Override
    public void execute() {
        System.out.println(message);
    }

    @Override
    public void undo() {
        System.out.println("Undo: " + message);
    }
}

在這個例子中,我們定義了一個 PrintCommand 類來實現 Command 接口,它會打印一條消息。然后我們創建了一個命令列表,包含兩個 PrintCommand 實例,表示一個宏命令。接著我們創建了一個 UndoManager 實例和一個 MacroCommand 實例,并將命令列表傳遞給 MacroCommand。最后我們執行宏命令并撤銷它。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凌云县| 苍溪县| 包头市| 涟水县| 醴陵市| 泰和县| 额尔古纳市| 环江| 永善县| 平度市| 科尔| 赣榆县| 云浮市| 澎湖县| 全椒县| 信宜市| 且末县| 慈溪市| 嘉善县| 开平市| 平舆县| 剑阁县| 襄城县| 马山县| 廉江市| 泰和县| 贵溪市| 肇源县| 关岭| 凤山市| 达日县| 雅江县| 毕节市| 封开县| 临猗县| 河间市| 砚山县| 禹州市| 石景山区| 丽江市| 五大连池市|