备忘录模式(Memento Pattern)是一种行为型模式,用于保存一个对象的某个状态,以便在适当的时候恢复对象到此状态。

定义

在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

使用场景

需要保存一个对象在某一时刻的状态或部分状态。比如撤销重做、游戏存档

uml

image.png

  • Originator: 原始角色,负责创建备忘录,记录、恢复自身的内部状态。可以根据需要决定 Memento 存储哪些状态。
  • Memento:备忘录,包含了要被恢复的对象的状态。
  • Caretaker: 负责存储备忘录,不能对备忘录的内容进行操作和访问,只能将备忘录传递给其它对象。

android 源码中的使用:onSaveInstanceState 和 onRestoreInstanceState

小结

优点:

  • 为用户提供了一种可以恢复状态的机制,可以比较方便地回到某个历史状态
  • 实现了信息的封装,使用户不需要关心状态保存的细节

缺点:

  • 消耗资源,每保存一次都会消耗一定的存储。(方案:仅保存最近一次)
  • 状态过多时保存比较麻烦。(方案:借助 注解AOP / JSON 自动处理)