设计模式学习笔记十九:备忘录模式
设计模式学习笔记十九:备忘录模式
介绍
备忘录(MEMENTO)模式属于对象行为型模式。主要用来对象状态的备份,可以理解为对象快照副本。当需要的时候可以从副本中回滚。
优点
- 回滚具备了数据恢复能力
缺点
- 需要占用额外的内存空间
- 对象复杂备份耗时多
使用场景
需要存储状态的场景,比较数据快照。
UML结构图:
代码实现
1.定义原发器,就是创建备忘录的那个对象,一般也是要进行备忘的对象。提供创建备忘录和回复备忘录的调用入口。即Originator:
public class Originator {
private String action;
public Originator() {
this.action = action;
}
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
System.out.println(this.action);
}
public Memento createMemento(String action) {
Memento memento = new Memento();
memento.setAction(action);
return memento;
}
public void setMemento(Memento memento) {
this.action = memento.getAction();
System.out.println("执行回滚......");
}
}
2.备忘录存储对象,可以是其他介质。即Memento:
public class Memento {
String action;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
}
3.备忘录管理者,一个POJO对象,即Caretaker
public class Caretaker {
private final Memento memento;
public Caretaker(Memento memento) {
this.memento = memento;
}
public Memento getMemento() {
return memento;
}
}
5.测试调用,TestDrive
public class Run {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setAction("执行操作:向前一步走");
System.out.println("当前状态:" + originator.getAction());
Memento memento = originator.createMemento(originator.getAction());
Caretaker caretaker = new Caretaker(memento);
originator.setAction("执行操作:向左一步走");
originator.setMemento(caretaker.getMemento());
System.out.println("当前操作状态:" + originator.getAction());
}
}