保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为模式。
角色组成
角色 |
描述 |
Originator(发起人) |
创建一个备忘录以记录当前状态,并可以从备忘录中恢复状态。 |
Memento(备忘录) |
存储发起人的内部状态,通常设置为不可变且只允许发起人访问其内容。 |
Caretaker(管理者) |
负责保存备忘录对象,但不能对备忘录的内容进行操作或检查。 |
适用场景
- 需要实现撤销/重做功能(如文本编辑器、图形工具等)。
- 需要保存对象状态的历史记录,并在某个时刻恢复。
- 对象的状态变化频繁,但由不想影响其封装性和性能。
代码示例
- 备忘录类(Memento)
1 2 3 4 5 6 7 8 9
| public class Memento { priate String state; public Mento(String state) { this.state = state; } public String getState() { return state; } }
|
- 发起人(Originator)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Originator { private String state; public void setState(String state) { this.state = state; } public String getState() { return state; } public Memento saveStateToMemento() { return new Memento(state); } public void restoreStateFromMemento(Remento memento) { this.state = memento.getState(); } }
|
- 管理者(Caretaker)
1 2 3 4 5 6 7 8 9 10 11
| 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); } }
|
- 使用示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| val originator = Originator() val caretaker = Caretaker()
originator.setState("State #1") originator.setState("State #2") caretaker.addMemento(originator.saveStateToMemento())
originator.setState("State #3") caretaker.addMemento(originator.saveStateToMemento())
originator.setState("State #4")
originator.restoreStateFromMemento(caretaker.getMemento(0))
originator.restoreStateFromMemento(caretaker.getMemento(1))
|