备忘录(Memento)模式又称标记(Token)模式。GOF给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
/**
* 发起人角色
*/
public class Originator {
private String state;
/**
* 工厂方法返回一个新备忘录对象
*/
public MementoIF createMemento() {
return new Memento(this.state);
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
System.out.println("Current state is " + this.state);
}
/**
* 将发起人恢复到备忘录对象记录的状态
*/
public void restoreMemento(MementoIF memento) {
Memento aMemento = (Memento) memento;
this.setState(aMemento.getSavedState());
}
/**
* 内部成员类,备忘录
*/
protected class Memento implements MementoIF {
private String savedState;
public Memento(String someState) {
this.savedState = someState;
}
public String getSavedState() {
return savedState;
}
public void setSavedState(String savedState) {
this.savedState = savedState;
}
}
}
public interface MementoIF {
}
/**
* 负责人角色
*/
public class Caretaker {
private MementoIF memento;
/**
* 备忘录的取值方法
*/
public MementoIF retrieveMemento() {
return this.memento;
}
/**
* 备忘录的赋值方法
*/
public void saveMemento(MementoIF memento) {
this.memento = memento;
}
}
public class Client {
//发起人
private static Originator originator = new Originator();
//负责人
private static Caretaker caretaker = new Caretaker();
public static void main(String[] args) {
//设置发起人对象状态
originator.setState("ON");
//创建备忘录对象将这个对象存储起来
caretaker.saveMemento(originator.createMemento());
//改变发起人对象状态
originator.setState("OFF");
//恢复发起人对象状态
originator.restoreMemento(caretaker.retrieveMemento());
}
}
1552

被折叠的 条评论
为什么被折叠?



