文档查阅说明:
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
使用场景:
● 需要保存和恢复数据的相关状态场景。
● 提供一个可回滚(rollback)的操作。
● 需要监控的副本场景中。
● 数据库连接的事务管理就是用的备忘录模式。
注意:
●备忘录的生命期
●备忘录的性能
不要在频繁建立备份的场景中使用备忘录模式(比如一个for循环中)。
clone方式备忘录:
● 发起人角色融合了发起人角色和备忘录角色,具有双重功效
多状态的备忘录模式
● 增加了一个BeanUtils类,其中backupProp是把发起人的所有属性值转换到HashMap中,方便备忘录角色存储。restoreProp方法则是把HashMap中的值返回到发起人角色中
public class Memento {
private boolean state;
public Memento(boolean state) {
super();
this.state = state;
}
public boolean isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
}
public class Originator {
private boolean state;
private Memento memento;
public boolean isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
public Memento getMemento() {
return new Memento(state);
}
public void setMemento(Memento memento) {
this.memento = memento;
}
public void show() {
System.out.println("state:"+state);
}
}
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
public class Test {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setState(true);
originator.show();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.getMemento());
originator.setState(false);
originator.show();
originator.setMemento(caretaker.getMemento());
originator.show();
}
}