1、定义:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态(以体现职责分离)。就可以在将来的某时刻将对象恢复到原先保存的状态。
2、适用环境:
- 功能比较复杂,但是需要维护或记录属性历史的类
- 需要保存的属性只是众多属性中的一部分时
- 有时对象的一些属性必须保存在对象以外的类中,但又必须要由对象自己来读取。这时可以使用备忘录把复杂的对象内部信息对其他的对象屏蔽起来。
- ※常用※当角色状态改变时有可能这个状态无效,此时可使用暂时存储起来的备忘录将状态复原
3、缺点
角色状态需要完整存储到备忘录中,但如果状态很多数据很大,那么备忘录对象将会非常消耗内存
4、理解分析(将对象拟人化的分为三类:发起人、备忘录、管理者)
(1)发起人
-
- 进行各种状态改变操作;
- 创建某一个时刻的状态备忘录;备忘录对象只能在这里创建,因为备忘录对象是为了保存发起人的信息,所以他的构造参数依赖于发起人的内部成员,而这也就让其他外部的类无法操作备忘录对象。
- 使用某个时刻的备忘恢复到以前的状态;访问某个时刻备忘录对象的内部成员,达到恢复自己状态的目的。
(2)备忘录
-
- 这个对象在外部不会使用,只会在‘发起人’对象内部进行建立和使用
- 保存发起人的某时刻状态
- 虽然是pulic的属性和构造函数,但是因为其他外部类无法实例化,所以也就只能由发起人在其内部对备忘录对象进行创建和访问
(3)管理者
-
- 主要是保存发起人在不同时刻创建的备忘状态
- 在发起人需要恢复状态时,从管理者这里得到所需时刻的状态备忘录对象,然后使用该备忘录对象恢复到相应时刻的状态