Memento备忘录设计模式是一个保存另外一个对象内部状态拷贝的对象,这样以后就可以将该对象恢复到以前保存的状态。Memento备忘录设计模式的结构如下:
Memento备忘录设计模式有以下3个重要角色:
Originator:需要保存内部状态的对象。
Caretaker:为Originator保存并恢复状态的对象。
Memento:存放Originator内部状态的对象,由Originator进行读写,并且Caretaker进行维护。
Memento备忘录设计模式例子代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| // Memento class Memento{ private String state; public Memento(String state){ this.state = state; } public String getState(){ return state; } } // Caretaker class Caretaker{ private Stack<Memento> mementos = new Stack<Memento>(); public void addMemento(Memento m){ mementos.push(m); } public Memento getMemento(){ if(!mementos.empty()){ return mementos.pop(); } return null; } } // Originator public class Originator{ private String state; public Originator(String state){ this.state = state; } public void setState(){ this.state = state; } public String getState(){ return state; } public Memento createMemento(String state){ return new Memento(state); } public static void main(String[] args){ Originator originator = new Originator(“State1”); Caretaker caretaker = new Caretaker(); caretaker.addMemento(originator. createMemento(originator.getState())); originator.setState(“State2”); String restore = caretaker. getMemento().getState(); System.out.println(“Current originator state=” + originator.getState() + “,restore state=” + restore); } }
|
程序运行结果:
Currentoriginator state= State2,restore state= State1
Memento备忘录设计模式常用于文字编辑软件/IDE集成开发环境中的撤销和恢复操作。