/** 发起人Originator,要【被备份】的类 */
public class Originator {
/**需要被保存的内部状态*/
public String date;
public int num;
/**提供一个【创建备忘录】的方法,其实就是将它自身的某些信息拷贝一份到一个备忘录对象中(或者可以直接将对象自身this作为参数传入) */
public Memento createMemento() {
return new Memento(this);
}
/**提供一个将备忘录中的信息【覆盖】自身信息的方法*/
public void setMemento(Memento memento) {
date = memento.date;
num = memento.num;
}
public void show() {
System.out.println(date + "---" + num);
}
}
/**备忘录Memento,备忘录对象中包含存储发起人状态的成员变量,它提供set,get或构造方法保存发起人状态及获取发起人状态 */
public class Memento {
public String date;
public int num;
public Memento(Originator org) {
this.date = org.date;
this.num = org.num;
}
}
/** 管理角色Caretaker,用于管理备忘录对象。不能对备忘录的内部进行操作或检查 */
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return this.memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
public class Test {
public static void main(String[] args) {
//原始数据
Originator org = new Originator();
org.date = new SimpleDateFormat("HH-mm-ss_SSS").format(new Date());
org.num = 99;
org.show();
//创建一个备忘录对象,保存原始数据的状态,目的是可以在需要时恢复
Memento memento = org.createMemento();
// 创建一个备忘录管理类,用于管理备忘录对象(其实基本没什么卵用)
Caretaker ctk = new Caretaker();
ctk.setMemento(memento);
//改变原始数据的状态
org.date = new SimpleDateFormat("HH-mm-ss_SSS").format(new Date());
org.num = 100;
org.show();
Memento memento2 = org.createMemento();
// 恢复之前保存的状态(将保存的数据导入)
org.setMemento(ctk.getMemento());
org.show();
ctk.setMemento(memento2);
org.setMemento(ctk.getMemento());
org.show();
}
}
去除掉管理类
public class Test {
public static void main(String[] args) {
//原始数据
Originator org = new Originator();
org.date = new SimpleDateFormat("HH-mm-ss_SSS").format(new Date());
org.num = 99;
org.show();
//创建一个备忘录对象,保存原始数据的状态,目的是可以在需要时恢复
Memento memento = org.createMemento();
//改变原始数据的状态
org.date = new SimpleDateFormat("HH-mm-ss_SSS").format(new Date());
org.num = 100;
org.show();
Memento memento2 = org.createMemento();
// 恢复之前保存的状态(将保存的数据导入)
org.setMemento(memento);
org.show();
org.setMemento(memento2);
org.show();
}
}