Java备忘录模式概述
·
备忘录模式概述
备忘录模式(Memento Pattern)是一种行为设计模式,允许在不破坏封装性的前提下捕获并外部化对象的内部状态,以便后续恢复。该模式由三个核心角色组成:
- Originator(发起人):需要保存状态的对象。
- Memento(备忘录):存储Originator内部状态的对象。
- Caretaker(管理者):负责保存和恢复备忘录。
核心实现步骤
定义备忘录类(Memento)
备忘录类用于存储Originator的内部状态,通常通过构造函数或方法接收状态数据,并提供获取状态的接口。
public class Memento {
private final String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
定义发起人类(Originator)
Originator类包含需要保存的状态,并提供创建备忘录和从备忘录恢复状态的方法。
public 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();
}
}
定义管理者类(Caretaker)
Caretaker负责保存和管理备忘录对象,但不直接操作备忘录内容。
import java.util.ArrayList;
import java.util.List;
public class Caretaker {
private List<Memento> mementoList = new ArrayList<>();
public void addMemento(Memento memento) {
mementoList.add(memento);
}
public Memento getMemento(int index) {
return mementoList.get(index);
}
}
使用示例
public class Main {
public static void main(String[] args) {
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
originator.setState("State #1");
caretaker.addMemento(originator.saveStateToMemento());
originator.setState("State #2");
caretaker.addMemento(originator.saveStateToMemento());
// 恢复到第一个状态
originator.restoreStateFromMemento(caretaker.getMemento(0));
System.out.println("Restored State: " + originator.getState());
}
}
应用场景
- 撤销/重做功能:如文本编辑器保存历史状态。
- 游戏存档:保存游戏进度以便恢复。
- 事务回滚:数据库操作失败时恢复原始状态。
注意事项
- 封装性保护:备忘录不应暴露Originator的实现细节,通常将Memento设为Originator的内部类。
- 性能开销:频繁保存状态可能导致内存占用过高,需权衡存储频率。
通过备忘录模式,可以灵活管理对象状态的历史记录,同时保持代码的清晰性和可维护性。
更多推荐



所有评论(0)