<aside>
💡
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
</aside>
结构图

- 发起人(Originator)
- 需要还原状态的那个对象
- 发起人有两个方法:
- 创建一个 Memento备忘录
- 使用备忘录记录当前时刻的内部状态。
- 备忘录(Memento)
- 存储Originator对象的内部状态
- 它可以包含发起人的部分或全部状态信息,但是对外部是不可见的
- 只有发起人能够访问备忘录对象的状态。
- 备忘录有两个接口
- Originator能够通过宽接口访问数据
- Caretaker只能看到窄接口,并将备忘录传递给其他对象。
- 管理者(Caretaker)
- 负责存储备忘录对象,但并不了解其内部结构
- 管理者可以存储多个备忘录对象。
- 客户端
- 在需要恢复状态时,客户端可以从管理者那里获取备忘录对象,并将其传递给发起人进行状态的恢复。
优缺点
优点
- 备忘录模式在保证了对象内部状态的封装和私有性前提下可以轻松地添加新的备忘录和发起人,实现“备份”
缺点
应用场景
- 备忘录模式常常用来实现撤销和重做功能
- 备忘录模式比较适用于功能比较复杂,但需要维护或记录属性历史的类
- 需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态
- 命令模式可以使用备忘录模式来存储可撤销操作的状态
题目
https://kamacoder.com/problempage.php?pid=1095