备忘录(Memento)模式是是一种行为模式,常用来保存一种状态。当状态被修改的时候,可以通过备忘录模式来恢复状态,就好比打游戏一样,我们可以进行保存记录,保存后我们可以随时调取记录来恢复到以前的数据。
角色介绍:
Originator:源数据,里面是需要保存的数据值,在这里可以创建备忘录,备份和回复数据。
Memento:备忘录类,用于存储Originator的数据状态。
Caretaker:负责存放备忘录,但是不能对备忘录的内容进行修改,可以把备忘录传递给其他对象。
使用实例:
Originator:
/**
* 源数据
* @author xiaoqi
*
*/
public class Originator {
private int value;
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
//创建备忘录
public Memento createMemento(){
return new Memento(value);
}
//恢复数据
public void restore(Memento memento){
this.value = memento.getValue();
}
}
Memento:
/**
* 备忘录
* @author xiaoqi
*
*/
public class Memento {
private int value;
public Memento(int value){
this.value = value;
}
public int getValue(){
return value;
}
}
Caretaker:
/**
* 负责存储备忘录,但是不提供修改操作
* @author xiaoqi
*
*/
public class Caretaker {
private Memento memento;
public void save(Memento memento){
this.memento = memento;
}
public Memento getMemento(){
return memento;
}
}
使用测试:
public class MementoTest {
public static void main(String[] args) {
Originator originator = new Originator();
//设置数据
int o = 11;
System.out.println("备份的值:"+o);
<span style="color:#ff0000;">originator.setValue(o);</span>
Caretaker caretaker = new Caretaker();
<span style="color:#ff0000;">caretaker.save(originator.createMemento());//创建caretaker对象保存备忘录</span>
//修改数据
originator.setValue(22222);
System.out.println("修改的值:"+22222);
//恢复数据
<span style="color:#ff0000;">originator.restore(caretaker.getMemento());</span>
int i = originator.getValue();
System.out.println("恢复后的值:"+i);
}
}
结果:
备份的值:11
修改的值:22222
恢复后的值:11