什么是备忘录模式?
备忘录模式(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