1.3 KiB
1.3 KiB
Without violating encapsulation,capture and externalize an object's internal state so that the object can be restored to this state later.(在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。)
- Originator 发起人角色
- Memento 备忘录角色
- CaraTaker 备忘录管理员角色
使用场景
- 需要保存和恢复数据的相关状态场景
- 提供一个可回滚的操作
- 需要监控的副本场景
- 数据库连接的事务管理
注意事项
- 备忘录的生命周期
- 备忘录的性能
clone 方式的备忘录
使用 Clone 方式的备忘录模式,可以使用在比较简单的场景或者比较单一的场景中,尽量不要与其他的对象产生严重的耦合关系
多状态的备忘录模式
使用 HashMap 储存状态,用 BeanUtil 恢复
如果要设计一个在运行期决定备份状态的框架,则建议采用 AOP 框架来实现,避免采用动态代理无谓地增加程序逻辑复杂性
多备份的备忘录模式
内存溢出问题,该备份一旦产生就装入内存,没有任何销毁的意向,这是非常危险的。因此,在系统设计时,要严格限定备忘录的创建,建议增加 Map 的上限,否则系统很容易产生内存溢出情况