定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象复原成原来保存的状态。
备忘录模式的角色
1:发起人角色(Originator)该角色记录当前对象的内部状态。负责定义哪些属于备份范围内的状态,负责创建 和恢复备忘数据。
public class Originator{
private String state = "";
private String getState(){
return this.state;
}
private void setState(String state){
this.state = state;
}
public Memento createMemento(){
return new Memento(this.state);
}
public void restoreMemento(Memento m){
this.setState(m.getState());
}
}
2:备忘录角色(Memento)
该角色负责存储发起人角色的内部状态,在需要时提供发起人需要的内部状态数据。
public class Memento{
private String state;
public Memento(String state){
this.state = state;
}
public String getState(){
return this.state;
}
public void setState(String state){
this.state = state;
}
}
3:负责人(Caretaker)
该角色对备忘录进行管理,保存和提供备忘录。
public class Caretaker{
private Memento m;
public Memento getMemento{
return this.m;
}
public void setMemento(Memento m){
this.m = m;
}
}
客户端代码:
public class Client{
Originator org = new Originator();
Caretaker care = new Caretaker();
//创建一个备忘录
Memento memento = care.setMemento(org.createMemento());
//恢复一个备忘录
org.restore(care.getMemento());
}
注意事项
1:备忘录的生命周期,应该在最近的代码中使用,要主动管理生命周期。
2:备忘录的性能,不能再循环中频繁创建备忘录,负责会提升系统开销。
使用场景
1:需要保存和恢复数据的状态。
2:提供一个可回滚的操作。
3:需要监控副本的场景。
4:数据库连接的事务管理模式就是备忘录模式
参考资料:设计模式(java)
网友评论