行业知识
设计模式之备忘录模式
2026-11-07 17:12:09
来源:互联网转载
备忘录模式(Memento)
定义
在不index.php/tags-41973.html" >���坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
使用场景
主要角色
- 发起人 Originator 需要备份的对象
- 看管人 Caretaker 保存备份的容器
- 备忘录 Memento 备份对象
类图
示例代码
需要备份的对象
public class Originator { private String state1; private String state2; private String staten; void setState1(String state1) { this.state1 = state1; } String getState1() { return state1; } // 创建备忘录 Memento createMemento() { Memento memento = new Memento(); memento.setState1(state1); memento.setStaten(staten); return memento; } // 恢复状态 void restoreMemento(Memento memento) { this.state1 = memento.getState1(); this.staten = memento.getStaten(); }} 备份对象
@Datapublic class Memento { private String state1; private String staten;} 看管人:负责管理备份
public class Caretaker { private final Map history = new HashMap(); // 保存备忘录 public void saveMemento(String name,Memento memento) { history.put(name,memento); } // 获取备忘录 public Memento getMemento(String name) { return history.get(name); } public Memento removeMemento(String name) { return history.remove(name); }} public class Client { public static void main(String[] args) { // 创建发起人 Originator originator = new Originator(); // 创建负责人 Caretaker caretaker = new Caretaker(); // 设置发起人的状态 originator.setState1("State 1"); System.out.println("Current State: " + originator.getState1()); // 保存状态 caretaker.saveMemento("第一次备份", originator.createMemento()); // 修改发起人的状态 originator.setState1("State 2"); System.out.println("Updated State: " + originator.getState1()); // 恢复状态 originator.restoreMemento(caretaker.getMemento("第一次备份")); System.out.println("Restored State: " + originator.getState1()); }} Current State: State 1Updated State: State 2Restored State: State 1
备忘录模式与命令模式对比
- 两者都能实现回退与撤销操作
- 命令模式是通过反向命令实现的,只能逐步回退或撤销,备忘录模式生产生产当前对象的快照,可以恢复到任意备份点
工作中遇到场景
下一篇:apn怎么接入代理服务器?