一、基本介绍
备忘录模式(Memento Pattern)属于行为型模式,是指在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
二、代码实现
(1)创建原始对象类和备忘录对象类
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
//保存一个状态对象
public Memento saveStateMemento() {
return new Memento(state);
}
//恢复状态对象
public void getStateFromMemento(Memento memento) {
state = memento.getState();
}
}
public class Memento {
private String state;
public Memento(String state) {
super();
this.state = state;
}
public String getState() {
return state;
}
}
(2)创建管理备忘录类
public class Laker {
private List<Memento> mementoList = new ArrayList<Memento>();
public void add(Memento memento) {
mementoList.add(memento);
}
public Memento get(int index) {
return mementoList.get(index);
}
}
(3)测试
public class Client {
public static void main(String[] args) {
Originator originator = new Originator();
Laker laker = new Laker();
originator.setState("状态#1");
laker.add(originator.saveStateMemento());
System.out.println("当前的状态是:" + originator.getState());
originator.setState("状态#2");
laker.add(originator.saveStateMemento());
System.out.println("当前的状态是:" + originator.getState());
//将originator恢复到状态1
originator.getStateFromMemento(laker.get(0));
System.out.println("当前的状态是:" + originator.getState());
}
}
三、UML类图
四、备忘录模式小结
- 给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
- 实现了信息的封装,使得用户不需要关心状态的保存细节。
- 如果类的成员变量过多,每一次保存都会消耗一定的内存, 这个需要注意。
- 为了节约内存,备忘录模式可以和原型模式配合使用。
- 适用的应用场景:后悔药、游戏存档、数据库的事务管理。