1、备忘录模式 (类似于数据的备份-恢复)
目的是:保存一个独享的某个状态,以便在适当的时候恢复对象。
如:假设有原始类A,A中有很多属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态。
而类C就是一个用来存储备忘录的,且只能对其存储,而不能进行修改操作。
实例一
// 原始类
public class Original {
private String name;
private String pass;
// 创建备忘录
public Memento createMemento() {
final Memento m = new Memento();
m.setPass(this.getPass());
return m;
}
// 恢复备忘录中记载的数据
public void restoreMemento(final Memento memento) {
this.pass = memento.getPass();
}
public String getName() {
return this.name;
}
public void setName(final String name) {
this.name = name;
}
public String getPass() {
return this.pass;
}
public void setPass(final String pass) {
this.pass = pass;
}
}
// 备忘录类
public class Memento {
private String pass;
public String getPass() {
return this.pass;
}
public void setPass(final String pass) {
this.pass = pass;
}
}
public class Storage {
private Memento memento;
public Memento getMemento() {
return this.memento;
}
public void setMemento(final Memento memento) {
this.memento = memento;
}
}
模拟调用:
public static void main(final String[] args) {
// 初始状态
final Original original = new Original();
original.setName("zhangsan");
original.setPass("12345");
// 创建备忘录
final Storage storage = new Storage();
storage.setMemento(original.createMemento());
// 修改密码前
System.out.println(" ~~~ before ~~~ :" + original.getPass());
original.setPass("qwert");
// 修改密码后
System.out.println(" ~~~~ after ~~~~ : " + original.getPass());
// 恢复原有密码
original.restoreMemento(storage.getMemento());
System.out.println(" ~~~ 恢复密码后 ~~~~ : " + original.getPass());
}