Memento模式
应用场景
- 如果必须保存一个对象在某一个时刻的全部或者部分状态,方便在以后需要的时候,可以把该对象恢复到先前的状态,可以使用备忘录模式。
本质
- 保存和恢复内部状态
优点
- 使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
- 本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需要的这些状态的版本。
- 当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。
缺点
- 资源消耗
- 不知道占用多大的空间
角色
-
Originator (原发器) :
创建一个备忘录Memento,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态。 -
Memento(备忘录):
存储Originator的内部状态, 备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。 -
Caretaker (负责人) :
负责人又称为管理者, 在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不能修改对象,也无须知道对象的实现细节。
Memento模式的类图
示例程序
示例程序的类图
示例代码
https://blog.csdn.net/qq_44824148/article/details/106258984
拓展思路
职责分担
- 变更为多次可以撤销。
- 变更为不仅可以撤销,还可以将现在的状态保存在文件中。
相关设计模式
- Command模式
在使用command模式处理命令时可以使用motor吗?我是。实现撤销功能。 - State模式
Memento模式中使用时实例表示状态。
State模式则是用类表状态。
满足的原则
- 单一职责原则