备忘录模式
模式描述
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便于恢复到原先保存的状态。
优点
- 备忘录只能由 Originator 来创建,保护封装边界;
- 简化了 Originator;
缺点
- 使用备忘录代价可能很高;
- 一些语言难以保证只有 Originator 访问 Memento;
- 维护 Memento 有潜在代价;
应用场景
- 需要保存一个对象的状态,便于恢复到原先保存的状态;
- 放丢失、撤销和恢复;
| DATE | CHANGELOG |
|---|---|
| 2023年5月7日 | 初始化 |
UML 类图
classDiagram
class Originator {
State state
setMemento(Memento memento)
createMemento() Memento
}
class Memento {
State state
getState()
setState()
}
Originator <-- Memento
class Caretaker {
}
Caretaker o-- Memento
Originator <-- Client
Caretaker <-- Client
参与者
Memento
- 保存 Originator 中的内部状态;
- 防止 Originator 意外的其他对象访问;
Originator
- 用来创建一个 Memento;
- 用来恢复内部状态;
Caretaker
- 负责保存 Memento;
Client 类
客户端。
数据流
- Client 创建一个 Memento,并使用 Originator 保存到 Caretaker 中;
相关模式
- 命令模式:可以使用备忘录来为可撤销的操作维护状态;
- 迭代模式:备忘录模式可用于迭代;
补充
- 备忘录模式更侧重于代码的设计和实现,备份更侧重架构设计或产品设计;
- 大对象的备份可能只备份必要的恢复信息,结合最新的数据来恢复;或者,使用全量备份和增量备份相结合,低频全量备份,高频增量备份,两者结合来做恢复;