备忘录是一种行为设计模式, 允许生成对象状态的快照并在以后将其还原。
备忘录不会影响它所处理的对象的内部结构, 也不会影响快照中保存的数据。
复杂度:
流行度:
使用示例: 备忘录的基本原则可通过序列化来实现, 这在 Java 语言中很常见。 尽管备忘录不是生成对象状态快照的唯一或最有效方法, 但它能在保护原始对象的结构不暴露给其他对象的情况下保存对象状态的备份。
下面是核心 Java 程序库中该模式的一些示例:
形状编辑器和复杂的撤销/恢复功能
该图像编辑器允许修改屏幕上形状的颜色和位置。 但任何修改都可被撤销和重复。
“撤销” 功能基于备忘录和命令模式的合作。 编辑器记录命令的执行历史。 在执行任何命令之前, 它都会生成备份并将其连接到一个命令对象。 而在执行完成后, 它会将已执行的命令放入历史记录中。
当用户请求撤销操作时, 编辑器将从历史记录中获取最近的命令, 恢复在该命令内部保存的状态备份。 如果用户再次请求撤销操作, 编辑器将恢复历史记录中的下一个命令, 以此类推。
被撤销的命令都将保存在历史记录中, 直至用户对屏幕上的形状进行了修改。 这对恢复被撤销的命令来说至关重要。
editor
editor/Editor.java: 编辑器代码
editor/Canvas.java: 画布代码
history
history/History.java: 保存命令和备忘录的历史记录
history/Memento.java: 备忘录类
commands
commands/Command.java: 基础命令类
commands/ColorCommand.java: 修改已选形状的颜色
commands/MoveCommand.java: 移动已选形状
shapes: 各种形状
shapes/Shape.java
shapes/BaseShape.java
shapes/Circle.java
shapes/Dot.java
shapes/Rectangle.java
shapes/CompoundShape.java
Demo.java: 初始化代码
OutputDemo.png: 屏幕截图