【说明】
在软件系统中,通常都会给用户提供取消、不确定或者错误的操作,允许将系统回复到原先的状态。现使用备忘录(Memento)模式实现该要求,得到如图6-1所示的类图。
memento包含了要被恢复的状态。originator创建并在Memento中存储状态。CareTaker负责从Memento中恢复状态。
【java代码】
import java.util.*;
class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
class Originator {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Memento saveStateToMemento() {
return (1) ;
}
public void getStateFromMemento(Memento Memento) {
state = (2);
}
}
class CareTaker {
private List<Memento> mementoList = new ArrayList<Memento>();
public (3) {
mementoList.add(state);
}
public (4) {
return mementoList.get(index);
}
}
class MementoPaneDemos {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.setState("State #1");
originator.setState("State #2");
careTaker.add((5));
originator.setState("State #3");
careTaker.add((6));
originator.setState("State #4");
System.out.println("Current State:" + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("First saved State:" + originator.getState());
originator.getStateFromMemento(careTaker.get(1));
System.out.println("Second saved State:" + originator.getState());
}
}
答案:
(1):new Memento(state) 或 new Memento(this.state)或 new Memento(getState())
(2):Memento.getState()
(3):void add(Memento state)
(4):Memento get(int index)
(5):originator.saveStateToMemento()
(6):originator.saveStateToMemento()