什么叫备忘录?两个字,回滚。备忘录模式可以记录一个对象的内部状态,当需要的时候可以将对象恢复到之前的状态
备忘录模式有三个角色:发起者,备忘录,管理者。简而言之,发起者对对象发生改动的时候自己备份一份备忘录交给管理者。每次发起者需要恢复数据的时候找管理者,管理者找出备忘录的数据交给发起者。
发起者只负责更改的时候备份一份然后交给管理者,发起者可以访问备忘录的所有信息。管理者对发起者创建的备忘录进行管理,只有保存和查看的权限,无法对备忘录进行修改。
发起者
public class Originator { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memento createMemento(){ return new Memento(state); } public void restoreMemento(Memento m){ this.setState(m.getState()); } }
备忘录
public 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; } }
管理者
public class manager { private Memento memento; public void setMemento(Memento m){ this.memento=m; } public Memento getMemento(){ return memento; } }
测试类
public class Client { public static void main(String[] args) { //发起人 Originator or = new Originator(); //管理者 manager manager = new manager(); or.setState("状态A"); manager.setMemento(or.createMemento()); or.setState("状态B"); or.restoreMemento(manager.getMemento()); System.out.println(or.getState()); } }
可以看出,管理者只是协助发起者管理备忘录的一个类,他在发起者需要恢复状态的时候获取备忘录交给请求者。简而言之,管理者就是一个替老板拿钱包的,在老板需要掏钱的时候把钱包提给老板。
应用场景:游戏中的存档啊,事务的回滚啊,文档的撤销等等