应用场景
备忘录的作用就是将已经发生的事情做一个记录,以方便以后浏览。具体定义是在不破化封装的情况下,捕获一个对象的内部状态并在该对象之外保存这个状态,以后可以将该对象恢复到原先保存的状态的。
类关系图
Originator: 发起人角色
记录当前时刻的内部状态,负责定义那些属于备份范围的状态,负责创建和恢复备忘录中的数据
Memento备忘录角色
负责存储Originator发起人对象的内部状态,在需要的时候提供发起人需要的内部状态
Caretaker:备忘录管理员角色
对备忘录进行管理/保存和提供备忘录
示例代码
备忘录类
备忘录类其实就是一JavaBean,对外只提供get和set方法。
class Memento{ //发起人的内部状态 private String state = ""; public Memento(String _state){ this.state = _state; } public String getState(){ return state; } public void setState(String _state){ this.state = _state; } }
备忘录管理员
需要备忘录管理是因为可能存在多个备忘录,这个的管理员里面应该有个容器来存储备忘录,为了编程方便,这里只放一个存储。
class Caretaker{ //备忘录对象 private Memento memento; public Memento getMemento(){ return memento; } public void setMemento(Memento memento){ this.memento = memento; } }
发起人
class Originator{ //内部状态 private String state = ""; public String getState(){ return state; } public void setState(String state){ this.state = state; } //创建一个备忘录 public Memento createMemento(){ return new Memento(this.state); } public void restoreMemento(Memento _memento){ this.setState(_memento.getState()); } }
场景类
class Client{ public static void main(String[] args) { Originator originator = new Originator(); originator.setState("当前状态是:0"); Caretaker caretaker = new Caretaker(); //定义备忘录 caretaker.setMemento(originator.createMemento()); //恢复备忘录 originator.restoreMemento(caretaker.getMemento()); } }
总结
备忘录为我们提供数据恢复的可能性,但是在备忘录的生命周期以及备忘录的性能上要做权衡,把重要的部分进行备忘。当然,备忘录有以下的变种。
- clone方式的备忘录
- 多状态备忘录模式
- 多备份备忘录
我们可以根据不同的场景来使用不同的备忘录模式。