文档地址:《设计模式之禅》
切入故事: 如此追女孩子, 你还不乐
定义: Without violating encapsulation,capture and externalize an object's internal state so that the object can be restored to this state later.(在不破坏封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态。 这样以后就可将该对象恢复到原先保存的状态。)
通用类图:
● Originator发起人角色
记录当前时刻的内部状态, 负责定义哪些属于备份范围的状态, 负责创建和恢复备忘录数据。
● Memento备忘录角色
负责存储Originator发起人对象的内部状态, 在需要的时候提供发起人需要的内部状态。
● Caretaker备忘录管理员角色
对备忘录进行管理、 保存和提供备忘录。
使用场景:
● 需要保存和恢复数据的相关状态场景。
● 提供一个可回滚(rollback) 的操作;
● 需要监控的副本场景中。
● 数据库连接的事务管理就是用的备忘录模式
注意事项:
● 备忘录的生命期
主动管理它的生命周期, 建立就要使用, 不使用就要立刻删除其引用, 等待垃圾回收器对它的回收处理。
● 备忘录的性能
不要在频繁建立备份的场景中使用备忘录模式(比如一个for循环中) , 原因有二: 一是控制不了备忘录建立的对象数量; 二是大对象的建立是要消耗资源的, 系统的性能需要考虑。