java怎么撤销

撤销 Java 操作可以通过使用 Stack 数据结构或命令模式来实现:Stack 数据结构:将状态保存到 Stack 中,按相反顺序执行状态以撤销操作。命令模式:将操作封装为对象,并将命令对象添加到队列中,执行队列中的命令以撤销操作。

撤销 Java 操作

撤销 Java 操作可以通过使用以下两种主要方法:

使用 Stack 数据结构

Stack 是一种后进先出 (LIFO) 数据结构,这意味着最后添加的元素将最先被移除。要实现撤销操作,可以将状态保存到 Stack 中,并按相反的顺序执行状态,以撤销之前的操作。例如

class Editor {
    private Stack history = new Stack<>();

    public void setText(String text) {
        history.push(currentText);
        currentText = text;
    }

    public void undo() {
        if (!history.isEmpty()) {
            currentText = history.pop();
        }
    }
}

使用命令模式

命令模式允许将操作封装为对象。要撤销操作,可以创建一个命令对象并将其添加到一个队列中。要撤销操作,只需执行队列中的命令。例如:

interface Command {
    void execute();
    void undo();
}

class SetTextCommand implements Command {
    private Editor editor;
    private String text;

    public SetTextCommand(Editor editor, String text) {
        this.editor = editor;
        this.text = text;
    }

    @Override
    public void execute() {
        editor.setText(text);
    }

    @Override
    public void undo() {
        editor.undo();
    }
}

class CommandQueue {
    private List commands = new ArrayList<>();

    public void addCommand(Command command) {
        commands.add(command);
    }

    public void undo() {
        if (!commands.isEmpty()) {
            Command command = commands.remove(commands.size() - 1);
            command.undo();
        }
    }
}