1.备忘录模式的关键就是要在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以利用该保存的状态实施恢复操作
2.结构图:
原发器(Originator):创建一个备忘录,并存储他当前的内部状态,也可以使用备忘录来恢复其内部状态
Memento(备忘录):储存原发器的内部状态,备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录中的属性
Caretaker(负责人):负责人又称为管理者,在负责人类中可以存储一个或者多个备忘录对象,它只负责存储对象,而不能修改对象,也无需知道对象的实现细节
3.优点:
-
使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当的保持封装的边界
-
本模式简化了发起人类
-
当发起人角色的状态改变的时候,有可能这个状态无效,这时就可以使用暂存的备忘录将状态复原
缺点:
-
如果发起人角色的状态需要完整的存储到备忘录对象中,那么在资源的消耗上就会很大
-
当管理者角色将一个备忘录存储起来的时候,管理者可能并不知道这个状态会占用多大的存储空间,从而无法提醒用户一个操作是否很大
4.使用场合:
如果必须保存一个对象在某一个时刻的全部或者部分状态,方便在以后需要的时候,可以把该对象恢复到先前的状态,可以使用备忘录模式
5.本质:
保存和恢复内部状态
6.应用实例:
游戏进度的备忘:
游戏角色(原发器角色):
通过调用角色状态存储箱完成角色状态的存储和恢复
角色窗台存储箱(备忘录角色):
只需要根据原发器中需要存储的属性进行修改和存储即可
角色状态管理者:
包含了对于角色状态存储箱的获得和修改,用来完成对于角色状态存储箱的管理
客户端的调用:
备忘录模式和原型模式可以混合使用:
在原发器对象(发起人对象)创建备忘录对象的时候,如果原发器对象中全部或者大部分的状态都需要保存,一个简洁的方式就是直接克隆一个原发器对象,也就是说,这个时候备忘录对象里面存放的是一个原发器对象
个人理解:
备忘录模式中有三个对象,分别是原发器,备忘录对象,管理者对象
原发器就是在使用的过程中,正常的角色,里面包含对于备忘录对象依赖关系
备忘录对象里面的属性就是原发器中需要进行存储的属性
管理者对象里面有对于备忘录对象聚合应用
可以看成是原发器和外界的一个交互的作用