备忘录

    备忘录模式(Memento),主要用于捕获一个对象的内部状态,以便在将来的某个时候恢复此状态。

    其实我们使用的几乎所有软件都用到了备忘录模式。最简单的备忘录模式就是保存到文件,打开文件。对于文本编辑器来说,保存就是把类的字符串存储到文件,打开就是恢复TextEditor类的状态。对于图像编辑器来说,原理是一样的,只是保存和恢复的数据格式比较复杂而已。Java的序列化也可以看作是备忘录模式。

    在使用文本编辑器的时候,我们还经常使用Undo、Redo这些功能。这些其实也可以用备忘录模式实现,即不定期地把TextEditor类的字符串复制一份存起来,这样就可以Undo或Redo。

    • Memonto:存储的内部状态;
    • Originator:创建一个备忘录并设置其状态;
    • Caretaker:负责保存备忘录。

    实际上我们在使用备忘录模式的时候,不必设计得这么复杂,只需要对类似TextEditor的类,增加getState()setState()就可以了。

    我们以一个文本编辑器TextEditor为例,它内部使用StringBuilder允许用户增删字符:

    为了支持这个能保存和恢复状态,我们增加getState()setState()两个方法:

    1. ...
    2. // 获取状态:
    3. public String getState() {
    4. }
    5. // 恢复状态:
    6. public void setState(String state) {
    7. this.buffer.delete(0, this.buffer.length());
    8. this.buffer.append(state);
    9. }

    从下载练习:给TextEditor添加备忘录模式 (推荐使用快速下载)

    备忘录模式是为了保存对象的内部状态,并在将来恢复,大多数软件提供的保存、打开,以及编辑过程中的Undo、Redo都是备忘录模式的应用。

    备忘录 - 图1