在备忘录模式中,通常包含以下角色:
class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Memento saveStateToMemento() {
return new Memento(state);
}
public void restoreStateFromMemento(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 saveMemento(Memento memento) {
this.memento = memento;
}
public Memento retrieveMemento() {
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.saveMemento(originator.saveStateToMemento());
originator.setState("State 2");
System.out.println("当前状态:" + originator.getState());
// 恢复状态
originator.restoreStateFromMemento(caretaker.retrieveMemento());
System.out.println("恢复后的状态:" + originator.getState());
}
}
在上述示例中,我们定义了发起人类(Originator)、备忘录类(Memento)和管理者类(Caretaker)。发起人类负责创建备忘录对象并保存状态,备忘录类用于存储状态,管理者类负责保存和提供对备忘录对象的访问。
在客户端代码中,我们创建了发起人对象和管理者对象。发起人对象设置了初始状态,并通过保存状态到备忘录对象中来保存状态。然后,我们修改发起人对象的状态,并通过从备忘录对象中恢复状态来回滚到之前的状态。
这个示例展示了如何使用Java实现备忘录模式,通过备忘录对象保存和恢复发起人对象的状态,实现对象状态的保存和回滚
备忘录模式在源码中有很多应用。以下是一些常见的源码中使用备忘录模式的情况:
优点:
备忘录模式通过备份和恢复对象状态,提供了一种可靠的方式来管理对象状态。它可以保护对象的封装性,并提供灵活的状态恢复机制。然而,备忘录模式可能会消耗较多的内存,并对系统性能产生一定的影响。在使用备忘录模式时,需要权衡其优缺点,并根据具体情况进行选择。