以下内容摘抄于《C#大话设计模式》
备忘录(Memento): 在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
备忘录模式的结构图如下:
Memento模式比较适用于功能比较复杂,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。
代码如下:
package com.schema.memento;
public class Memento {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
package com.schema.memento;
public class Originator {
public String state;
public void SetMemento(Memento memento){
state = memento.getState();
}
public Memento createMemento(){
Memento memento = new Memento();
memento.setState(state);
return memento;
}
public void Show(){
System.out.println("State=" + state);
}
}
package com.schema.memento;
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
package com.schema.memento;
public class AppMain {
public static void main(String[] args) {
Originator originator = new Originator();
originator.state = "on";
originator.Show();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.createMemento());
originator.state = "off";
originator.Show();
originator.SetMemento(caretaker.getMemento());
originator.Show();
}
}