1.定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
通俗来讲,备忘录模式就是一个对象的备份模式,提供一种程序数据的备份方法。
2.备忘录模式UML图
备忘录模式UML图
角色介绍
Originator 发起人角色,记录当前时刻的内部状态,负责创建和恢复备忘录记录的数据。
Memento 备忘录角色,负责储存发起人角色的内部角色,在需要的时候提供发起人需要的内部状态
Caretaker 备忘录管理员角色,对备忘录进行管理的角色。
3.简单实现
3.1发起人角色
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento createMemento(){
return new Memento(this.state);
}
public void restoreMemento(Memento memento){
setState(memento.getState());
}
}
3.2 备忘录角色
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;
}
}
3.3备忘录管理者
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
3.4客户端调用
public class MyClass {
public static void main(String args[]) {
Originator originator=new Originator();
originator.setState("111");
/**
* 保存当前状态
*/
Memento memento=originator.createMemento();
Caretaker caretaker=new Caretaker();
caretaker.setMemento(memento);
/**
* 修改状态
*/
originator.setState("222");
System.out.println("发起人的当前状态为"+originator.getState());
/**
* 恢复之前保存的状态
*/
originator.restoreMemento(caretaker.getMemento());
System.out.println("发起人的当前状态为"+originator.getState());
}
}
打印结果为
发起人的当前状态为222
发起人的当前状态为111
这只是个最简单的例子,有时使用的时候还是有很多扩展的,比如多状态呀,结合原型模式呀,多备份的备忘录等。
4.总结
优点
可以进行数据的存储进行回滚操作
使用场景
需要保存和恢复数据的相关状态场景。
需要监控的副本场景中。
注意事项
备忘录的生命周期
备忘录的性能,不要再频繁建立备份的场景中使用,需要考虑性能问题。