- 简介
- 应用场景
- 角色关系
- 结构图
- 代码实现
备忘录模式:Memento模式
行为模式之一
作用:保存对象的内部状态,并在需要的时候(undo、rollback)恢复对象以前的状态
应用场景如果一个对象需要保存状态并想通过undo或roback等操作,恢复到以前的状态时可以使用
具体使用
- 游戏存档
应用注意
- 备忘录可以有多份,这个可以调整备忘录管理者的结构即可(改成List)
- 备忘录保存的状态,是一份数据,如下示例只是用String来代替,理论上它可以是任何结构数据,注意与Originator角色解耦
- Originator:原始对象。运行着的原始的对象数据
- Memento:备忘录。用来保存原始对象数据
- Caretaker:备忘录管理者。用来操作备忘录:保存、恢复
- 角色:Originator
public class Originator {
private String state;
public Originator() {}
public Originator(String state) {
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public void rollbackFromMemento(Memento memento){
this.state = memento.getState();
}
public Memento createMemento(){
return new Memento(this.state);
}
@Override
public String toString() {
return "Originator{state='" + state + '}';
}
}
- 角色:备忘录 memento
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;
}
}
- 角色:备忘录管理者 Caretaker
public class Caretaker {
private Memento memento;
public Caretaker() {}
public Caretaker(Memento memento) {
this.memento = memento;
}
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
- 测试
public class ClientTest {
public static void main(String[] args) {
Originator originator = new Originator("北京");
System.out.println(originator);
// 保存状态:备忘录管理者创建备忘录
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.createMemento());
// 原state数据继续变化
originator.setState("上海");
System.out.println(originator);
// 恢复状态:备忘录恢复
originator.rollbackFromMemento(caretaker.getMemento());
System.out.println(originator);
}
}
- 测试输出
Originator{state='北京}
Originator{state='上海}
Originator{state='北京}



