【Java】23种设计模式——19.备忘录模式
定义
备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下捕获并外部化一个对象的内部状态,以便之后可以将该对象恢复到原先保存的状态。
核心角色
- Originator(原发器):需要保存状态的对象。
- Memento(备忘录):存储原发器内部状态的对象。
- Caretaker(管理者):负责保存和恢复备忘录对象。
应用场景
- 需要保存对象状态快照以便回滚
- 需要实现撤销/重做功能
- 需要保存对象历史状态
- 需要实现事务回滚机制
使用
-
原发器
/** * 备忘录模式:原发器 * @Author:lyj * @Date:2025/5/21 09:54 */ public class Originator { private String state; /** * 设置状态 * @param state */ public void setMemento(String state) { this.state = state; System.out.println("原发器状态:" + state); } /** * 创建备忘录 * @return */ public Memento saveMemento() { return new Memento(state); } /** * 恢复备忘录 * @param memento */ public void restoreMemento(Memento memento) { this.state = memento.getState(); System.out.println("原发器状态:" + state); } } -
备忘录
/** * 备忘录模式:备忘录 * @Author:lyj * @Date:2025/5/21 09:52 */ public class Memento { private String state; // 状态 public Memento(String state) { this.state = state; } public String getState() { return state; } public void setState(String state) { this.state = state; } } -
管理者
/** * 备忘录模式-管理者: 负责保存备忘录对象 * @Author:lyj * @Date:2025/5/21 10:36 */ public class Caretaker { private List<Memento> mementoList = new ArrayList<>(); /** * 添加备忘录对象 * @param memento 备忘录对象 */ public void add(Memento memento) { mementoList.add(memento); } /** * 获取指定索引的备忘录对象 * @param index 索引 * @return 备忘录对象 */ public Memento get(int index) { return mementoList.get(index); } }
运行测试数据:
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
// 设置并保存账套
originator.setMemento("状态1");
caretaker.add(originator.saveMemento());
originator.setMemento("状态2");
caretaker.add(originator.saveMemento());
// 恢复到指定状态
originator.restoreMemento(caretaker.get(0));
运行结果:

有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。

浙公网安备 33010602011771号