行为型模式-备忘录模式
1 什么是备忘录模式
备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不暴露对象实现细节的情况下捕获并存储其内部状态,以后可以将对象恢复到先前的状态。备忘录模式可以帮助我们实现撤销、恢复等操作,同时也可以防止对象内部状态的直接访问和修改。
在备忘录模式中,包括以下几个关键角色:
- Originator(发起人):负责创建一个备忘录,用于记录当前时刻的内部状态,以及使用备忘录恢复内部状态。
- Memento(备忘录):用于存储Originator的内部状态,实现对Originator的状态存储和恢复。
- Caretaker(负责人):负责保存备忘录,但不能对备忘录的内容进行操作和访问。
2 举个例子
下面以一个简单的文本编辑器的例子来说明备忘录模式。
#include <iostream>
#include <string>
// 备忘录类
class Memento {
private:
std::string state;
public:
Memento(const std::string& s) : state(s) {}
std::string getState() const {
return state;
}
};
// 发起人类
class TextEditor {
private:
std::string text;
public:
void setText(const std::string& t) {
text = t;
}
std::string getText() const {
return text;
}
Memento createMemento() {
return Memento(text);
}
void restoreFromMemento(const Memento& m) {
text = m.getState();
}
};
// 负责人类
class TextEditorCaretaker {
private:
Memento memento;
public:
void saveMemento(const Memento& m) {
memento = m;
}
Memento retrieveMemento() {
return memento;
}
};
int main() {
TextEditor textEditor;
TextEditorCaretaker caretaker;
textEditor.setText("This is the initial text.");
caretaker.saveMemento(textEditor.createMemento()); // 保存初始状态
textEditor.setText("This is an updated text."); // 修改文本
std::cout << "Current text: " << textEditor.getText() << std::endl;
textEditor.restoreFromMemento(caretaker.retrieveMemento()); // 恢复到初始状态
std::cout << "Restored text: " << textEditor.getText() << std::endl;
return 0;
}
在上面的示例中,TextEditor 是发起人类,负责维护文本和创建备忘录。Memento 是备忘录类,用于存储 TextEditor 的状态。TextEditorCaretaker 是负责人类,负责保存和恢复备忘录。
在示例中,首先保存了文本编辑器的初始状态作为备忘录,然后修改了文本内容。接着,通过负责人类将文本编辑器恢复到之前保存的状态,使得文本内容回到了初始状态。
3 总结
通过备忘录模式,我们可以保存对象的内部状态,并在需要时将其恢复,从而实现了状态的保存和撤销操作。
作者QQ:115124903,欢迎交流。
每一步踏出,都是一次探索,一次成长。
每一步踏出,都是一次探索,一次成长。