介绍
在日常使用程序中,我们经常会使用到一个快捷键:ctrl+z
,让我们的程序回到上一步的状态,而备忘录模式(Memento Pattern)就是为了保存一个对象的某个状态,以便于在适当的时候恢复对象,属于行为型模式
主要解决:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原来保存的状态
优点:1、提供了一种可以恢复状态的机制; 2、实现了信息的封装,使得用户不需要关心状态的保存细节。
缺点:消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
主要思路:
- 首先备忘录类,也就是将当前类状态备份的类,需要有当前类中需要备份的属性
- 将当前类此时的属性值赋值给备忘录类
- 将备忘录类统一管理起来
- 在需要的时候,当前类通过某种标记指定使用哪一个备忘录类进行恢复
示例
通过前面分析,我们需要:客户类(需要保存状态的类)、备忘录类(记录状态的类)、备忘录管理类(统一管理备忘录类)
UML类图
可以看到,客户类和备忘录管理类分别与备忘录类有着依赖、组合关系,但它们彼此之间没有依赖关系
客户类
1 | //此客户类中只有state这一个属性需要保存 |
备忘录类
1 | public class Memento { |
备忘录管理类
1 | public class CareTaker { |
测试
1 | public class MementoPatternDemo { |
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/26/designPattern/2020-03-26-mementoPattern/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!