21. 备忘录模式(Memento)
21. 备忘录模式(Memento)
问题:需要保存和恢复对象之前的状态(如撤销操作、存档)。
核心:在不破坏封装的前提下,捕获对象的内部状态并外部存储。
class EditorMemento {
constructor(content) { this.content = content; }
}
class Editor {
#content = '';
type(text) { this.#content += text; }
getContent() { return this.#content; }
save() { return new EditorMemento(this.#content); }
restore(memento) { this.#content = memento.content; }
}
const editor = new Editor();
editor.type('你好');
editor.type('世界');
console.log(editor.getContent()); // 你好世界
const saved = editor.save();
editor.type('!');
console.log(editor.getContent()); // 你好世界!
editor.restore(saved);
console.log(editor.getContent()); // 你好世界package memento
import "fmt"
type Memento struct {
content string
}
func (m Memento) Content() string { return m.content }
type Editor struct {
content string
}
func (e *Editor) Type(text string) { e.content += text }
func (e *Editor) GetContent() string { return e.content }
func (e *Editor) Save() Memento {
return Memento{content: e.content}
}
func (e *Editor) Restore(m Memento) {
e.content = m.Content()
}
// 使用
// editor := &Editor{}
// editor.Type("你好")
// editor.Type("世界")
// saved := editor.Save()
// editor.Type("!")
// editor.Restore(saved)
// fmt.Println(editor.GetContent()) // 你好世界