第十八章 备忘录模式
备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以恢复该对象到原先的状态。
Caretaker负责不暴露Originator的内部细节,Memento负责备忘字段。用星姐的话----完美!\\\> <///
不足:角色状态要完整存储到备忘录对象中,如果状态数据很大很多,在资源消耗上,将非常耗内存。
/** * Created by hero on 16-4-5. */ public class Originator { private String state; public Memento createMemento(){ return new Memento(state); } public void recoveryState(Memento memento){ state = memento.getState(); } public Originator() { } public Originator(String state) { this.state = state; } public String getState() { return state; } public void setState(String state) { this.state = state; } } /** * Created by hero on 16-4-5. */ public class Memento { private String state; public Memento(String state) { this.state = state; } public String getState() { return state; } //不能有set方法 } /** * Created by hero on 16-4-5. */ public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } } public class Main { public static void main(String[] args) { Originator originator = new Originator(); originator.setState("on"); Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemento()); originator.setState("off"); originator.recoveryState(caretaker.getMemento()); } }
世上无难事,只要肯登攀。