备忘录模式通俗来讲,就是一个对象的备份模式,提供了一种程序数据的备份方法
1.Oraiginator 发起人角色
记录当前时刻的内部桩体,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录数据
2.Memento备忘录角色
负责存储Originator发起人对象的内部状态,在需要时提供发起人需要的内部状态
3.Caretaker 备忘录管理员角色
对备忘录角色进行管理,保存和提供备忘录
发起人角色
public class Originator {
//内部状态
private String state = "";
public String getState(){
return state;
}
public void setState(String state){
this.state = state;
}
//创建一个备忘录
public Memrmto createMemento(){
return new Memento(this.state);
}
//从备忘录中恢复状态
public void restoreMemento(Memento _memento){
this.setState(_memento.getState());
}
}
备忘录角色
public class Memento {
private String state = "";
//从构造函数中传递参数
public Memento(String state){
this.state = state;
}
public String getState(){
return state;
}
public void setState(String state){
this.state = state;
}
}
备忘录管理员角色(存放备忘录角色)
public class Caretaker{
private Memento memento;
public Memento getMemento(){
return memento;
}
public void setMemento(Memento memento){
this.memento = memento;
}
}
场景类
public class Client {
public static void main(String[] args){
//定义发起人
Originator originator = new Originator();
//定义一个备忘录管理员
Caretaker caretaker = new Caretaker();
//存放一个备忘录
caretaker.setMemento(originator.createMemento());
//从备忘录中恢复一个状态
originator.restoreMemento(Caretaker.getMemento());
}
}
这就是一个简单的备忘录模式,当然实际项目中会复杂很多
备忘录模式的使用场景
1.需要保存和恢复数据的场景
2.提供可回滚的操作
3.数据库的事务管理就是用的备忘录模式
注意事项
备忘录的生命周期,建立起来就要使用,不使用了就要立刻删除其引用,主动管理它的生命周期
备忘录的性能
不要在需要频繁备份的地方使用备忘录模式
原因有两个:
1.是无法控制备忘录的生成对象数量
2.是大对象的建立是需要消耗资源的