简介:备忘录模式在不破坏原始类封装的前提下,通过备忘类复制原始类的状态并保存起来。这样后面可根据备忘类进行恢复至之前的某一状态。
代码实现及测试如下:
/**
* 发起人类:被备忘录的类,内部有自己的属性状态和生成备忘录类方法
* @author dedu
*
*/
public class Originator {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
/**
* 生成备忘录类时需新建对象
* @return 备忘录类
*/
public Memento createMemento() {
return new Memento(this);
}
/**
* 恢复至之前状态时,只需修改为原来的属性即可
* @param memento
*/
public void recoverToMemento(Memento memento) {
this.status = memento.getStatus();
}
}
/**
* 备忘录类: 负责同步发起人类的属性状态
* @author dedu
*
*/
public class Memento {
private String status;
public Memento(Originator originator) {
this.status = originator.getStatus();
}
public String getStatus() {
return status;
}
}
/**
* 管理者:负责存储备忘录对象
* @author dedu
*
*/
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
测试:
public static void main(String[] args) {
Originator originator = new Originator();
originator.setStatus("First Step");
System.out.println("对象状态为:" + originator.getStatus());
//进行备忘
Memento memento = originator.createMemento();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(memento);
originator.setStatus("Second Step");
System.out.println("对象状态为:" + originator.getStatus());
//恢复至备忘状态
originator.recoverToMemento(caretaker.getMemento());
System.out.println("对象状态恢复为:" + originator.getStatus());
}