备忘录模式(Memento Pattern)是一种行为型模式,用于保存一个对象的某个状态,以便在适当的时候恢复对象到此状态。
定义
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。
使用场景
需要保存一个对象在某一时刻的状态或部分状态。比如撤销重做、游戏存档
uml
- Originator: 原始角色,负责创建备忘录,记录、恢复自身的内部状态。可以根据需要决定 Memento 存储哪些状态。
- Memento:备忘录,包含了要被恢复的对象的状态。
- Caretaker: 负责存储备忘录,不能对备忘录的内容进行操作和访问,只能将备忘录传递给其它对象。
android 源码中的使用:onSaveInstanceState 和 onRestoreInstanceState
小结
优点:
- 为用户提供了一种可以恢复状态的机制,可以比较方便地回到某个历史状态
- 实现了信息的封装,使用户不需要关心状态保存的细节
缺点:
- 消耗资源,每保存一次都会消耗一定的存储。(方案:仅保存最近一次)
- 状态过多时保存比较麻烦。(方案:借助 注解AOP / JSON 自动处理)