备忘录模式比较适用于功能复杂的,但需要维护或记录属性历史的类,或需要保存的属性只是众多属性中的一小部分时。发起者可以根据保存的记录信息还原到前一个状态
例如:当某个系统追踪使用命令模式,需要实现命令的撤销功能,那么命令模式可以使用备忘录模式来存储可撤销操作的状态。
UML:
JAVA:
public class MementoTest {
public static void main(String[] args) {
Originator o = new Originator();
o.setState("正常");
Caretaker c = new Caretaker();
c.setMemento(o.createMemento());//存储备忘录信息,并且将备忘录放到管理者中
o.setState("异常");
System.out.println(o.getState());
o.setMemnto(c.getMemento());
System.out.println(o.getState());
}
}
class Originator{
private String state; //需要备忘录记录的信息之一
public Memento createMemento(){ //创建备忘录类,并保存信息
return new Memento(state);
}
public void setMemnto(Memento memnto){ //恢复备忘录
state = memnto.getState();
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
class Memento{ //备忘录
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
class Caretaker{ //管理者
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}