Memento - 备忘录设计模式

9 阅读1分钟

什么是备忘录模式?

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。常见的应用有各种文件的存档,订单历史快照,数据库备份等等。

优缺点

优点:

1.给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。
2.实现了信息的封装,使得用户不需要关心状态的保存细节。

缺点:

1.消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
2.要注意版本管理,否则一定要注意数据类型变更的兼容问题。

示例

// Originator
class TextEditor {
    private StringBuffer buffer = new StringBuffer();

    void write(String text) {
        buffer.append(text);
    }

    public String save() {
        return buffer.toString();
    }

    public void restore(String state) {
        this.buffer.delete(0, this.buffer.length());
        this.buffer.append(state);
    }

    public void print() {
        System.out.println(buffer.toString());
    }
}

// Caretaker
public static void main(String[] args) {
    final TextEditor editor = new TextEditor();
    editor.write("Lucien Chen \n");
    editor.write("is writing \n");
    editor.write("Hello World \n");
    System.out.println("-- Before Save--");
    editor.print();
    final String memento = editor.save();
    System.out.println("-- After Save--");
    editor.write("A typo... \n");
    editor.print();
    System.out.println("-- Restore Data--");
    editor.restore(memento);
    editor.print();
}

Output

-- Before Save--
Lucien Chen 
is writing 
Hello World 

-- After Save--
Lucien Chen 
is writing 
Hello World 
A typo... 

-- Restore Data--
Lucien Chen 
is writing 
Hello World