在 Java 中为状态更改实现撤消,可以使用命令模式(Command Pattern)。命令模式是一种行为型设计模式,它将一个请求或操作封装成一个对象,从而使请求发送者和请求接收者解耦,并且可以撤销、重做和组合操作。
以下是一个简单的命令模式实现撤消的示例:
// 定义命令接口
interface Command {
void execute();
void undo();
}
// 具体命令实现
class ConcreteCommand implements Command {
private Receiver receiver;
private String oldState;
private String newState;
public ConcreteCommand(Receiver receiver, String oldState, String newState) {
this.receiver = receiver;
this.oldState = oldState;
this.newState = newState;
}
@Override
public void execute() {
receiver.changeState(oldState, newState);
}
@Override
public void undo() {
receiver.changeState(newState, oldState);
}
}
// 接收者
class Receiver {
private String state;
public void changeState(String oldState, String newState) {
if (this.state.equals(oldState)) {
this.state = newState;
System.out.println("状态已更改为:" + newState);
} else {
System.out.println("状态更改失败,当前状态为:" + this.state);
}
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver, "状态1", "状态2");
// 执行操作
command.execute();
// 撤销操作
command.undo();
}
}
在这个示例中,我们定义了一个命令接口 Command
,具体命令实现 ConcreteCommand
实现了 Command
接口,并且在 execute()
方法中执行了状态更改操作,在 undo()
方法中撤销了状态更改操作。接收者 Receiver
负责处理状态更改操作。
在客户端代码中,我们创建了一个接收者和一个命令对象,然后分别调用了 execute()
和 undo()
方法来执行和撤销状态更改操作。
这个示例可以很容易地扩展到其他操作,例如撤销多个操作、重做操作、组合操作等。
领取专属 10元无门槛券
手把手带您无忧上云