定义
备忘录模式(Memento Pattern)是一种行为设计模式,它提供了一种在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将该对象恢复到原先保存的状态。
备忘录模式的要素:
- Originator(发起人):创建一个含有当前状态的备忘录对象,也可以使用备忘录对象恢复内部状态。
- Memento(备忘录):存储发起人的状态信息,但对外部屏蔽了发起人状态的细节,防止外部对象对状态进行非法访问。
- Caretaker(管理者):负责保存备忘录对象,不关心备忘录的内容,只负责存储和提供备忘录。
示例代码
创建备忘录类
public class Memento { private final String state; Memento(String state) { this.state = state; } String getState() { return state; } }
管理者
public class Caretaker { private List<Memento> mementoList = new ArrayList<>(); public void addMemento(Memento memento) { mementoList.add(memento); } public Memento getMemento(int index) { return mementoList.get(index); } }
备忘录类
public class Originator { private String state; public void setState(String state) { this.state = state; System.out.println("State set to: " + state); } public String getState() { return state; } public Memento saveStateToMemento() { return new Memento(state); } public void getStateFromMemento(Memento memento) { state = memento.getState(); System.out.println("恢复状态:" + state); } }
测试类
public class MementoTest { @Test public void test() { // 定义出发起人 Originator originator = new Originator(); originator.setState("初始状态"); // 定义出备忘录管理员 Caretaker caretaker = new Caretaker(); // 创建一个备忘录 caretaker.addMemento(originator.saveStateToMemento()); originator.setState("制作中"); // 恢复一个备忘录 originator.getStateFromMemento(caretaker.getMemento(0)); } }
运行结果
State set to: 初始状态 State set to: 制作中 恢复状态:初始状态