备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在日后恢复对象到这个状态。
备忘录模式通常由三个主要角色组成:
下面是一个简单的示例,说明如何使用备忘录模式来实现撤销操作:
// 发起人类
class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Memento createMemento() {
return new Memento(state);
}
public void restoreMemento(Memento memento) {
state = memento.getState();
}
}
// 备忘录类
class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
// 管理者类
class Caretaker {
private Memento memento;
public void setMemento(Memento memento) {
this.memento = memento;
}
public Memento getMemento() {
return memento;
}
}
// 示例代码
public class Main {
public static void main(String[] args) {
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
// 设置初始状态
originator.setState("State 1");
System.out.println("初始状态:" + originator.getState());
// 保存状态
caretaker.setMemento(originator.createMemento());
// 修改状态
originator.setState("State 2");
System.out.println("修改后的状态:" + originator.getState());
// 恢复状态
originator.restoreMemento(caretaker.getMemento());
System.out.println("恢复后的状态:" + originator.getState());
}
}
在上述示例中,Originator 类表示发起人,它负责创建备忘录并记录当前状态。Memento 类表示备忘录,它用于存储 Originator 的状态。Caretaker 类表示管理者,它保存备忘录对象并在需要时将其返回给 Originator。
在示例中,我们首先设置 Originator 的初始状态为 “State 1”,然后保存该状态的备忘录。接着,我们修改 Originator 的状态为 “State 2”,但后来又通过恢复备忘录将其状态还原为 “State 1”。
备忘录模式的优点是可以实现对象状态的保存和恢复,使得对象的状态变化对客户端透明。它可以在不破坏封装性的情况下实现状态的保存和恢复,提供了一种可靠的撤销操作的实现方式。