模式定义
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。通常需要一个备忘录类来存储对象状态,然后还有一个类来管理存储的对象状态,以便在需要的时候对对象进行恢复。
模式示例
下面来看具体示例,备忘录主要有三个角色:备忘录对象,要备忘的目标对象,备忘录管理。首先看备忘录对象
1 | /** |
1 | /** |
1 | /** |
客户端调用
1 | public class Main { |
1 | default setting |
模式总结
备忘录模式的核心思想就是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在需要的时候可以从保存的状态中恢复。
优缺点
- 优点
- 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
- 实现了信息的封装,使得用户不需要关心状态的保存细节。
- 缺点
- 消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
使用场景
通常使用在需要保存/恢复数据的相关状态场景,在保存状态后,还提供一个可回滚的操作。也就是需要实现存档和读档这两个过程。
- 游戏存档非常适合使用备忘录模式
- 撤销操作
- 数据库事务管理
注意事项
- 为了符合迪米特原则,还要增加一个管理备忘录的类。
- 为了节约内存,可使用原型模式+备忘录模式