备忘录模式简介
- 备忘录模式(memento pattern)又叫快照模式,在不破坏封装性的前提下,捕捉一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象回复到原先保存的对象。
结构
- 1.发起者角色(Originator):记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其它业务功能,它可以访问备忘录里的所有信息。
- 2.备忘录角色(Memento):负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
- 3.管理者角色(Caretaker):对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问和修改。
UML图

具体实现
package com.xxliao.pattern.behavioral.memento.demo;
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public Memento saveStateToMemento() {
return new Memento(state);
}
public void getStateFromMemento(Memento memento) {
state = memento.getState();
}
}
package com.xxliao.pattern.behavioral.memento.demo;
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;
}
}
package com.xxliao.pattern.behavioral.memento.demo;
import java.util.ArrayList;
import java.util.List;
public class Caretaker {
private List<Memento> list = new ArrayList<Memento>();
public void add(Memento memento) {
list.add(memento);
}
public Memento get(int index) {
return list.get(index);
}
}
package com.xxliao.pattern.behavioral.memento.demo;
public class Client {
public static void main(String[] args) {
Originator originator = new Originator();
Caretaker caretaker = new Caretaker();
originator.setState("状态#1 血量100");
caretaker.add(originator.saveStateToMemento());
originator.setState("状态#2 血量88");
caretaker.add(originator.saveStateToMemento());
originator.setState("状态#3 血量40");
caretaker.add(originator.saveStateToMemento());
System.out.println("================当前的状态是:" + originator.getState()+"===============");
originator.getStateFromMemento(caretaker.get(0));
System.out.println("================当前的状态是:" + originator.getState()+"===============");
}
}
- 测试结果
