本文共 1852 字,大约阅读时间需要 6 分钟。
备忘录模式(Memento),在不破坏封装性的前提下,捕获一个对象的内在状态并在对象之外保存该状态,这样以后就可以将对象恢复到原先保存的状态。
Originator(发起人):负责创建一个备忘录,用以记录当前的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些状态。
Memnto(备忘录):负责保存Originator对象的内部状态,并防止originator以外的对象访问备忘录。备忘录有两个接口,caretaker只能看到备忘录的窄接口,它只能将备忘录传递给其他对象。originator能看到一个宽接口,允许它反问返回到先前状态的所有数据。
Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作和检查。
1、发起人Originator
public class Originator { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memento createMemto(){ return new Memento(state); } public void setMemento(Memento memento){ state = memento.getState(); } public void show(){ System.out.println("当前状态是:"+state); }}
2、备忘录Memento
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; }}
3、管理者Caretaker
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; }}
4、测试
public class Test { public static void main(String[] args) { //originator初始状态on Originator originator = new Originator(); originator.setState("on"); originator.show(); //保存状态时,由于有很好的封装,可以隐藏originator的实现细节 Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemto()); //originator改变状态off originator.setState("off"); originator.show(); //恢复原始状态 originator.setMemento(caretaker.getMemento()); originator.show(); }}输出:当前状态是:on当前状态是:off当前状态是:on
注:参考文献《大话设计模式》程杰著。