【C++】备忘录模式
目录
- 一、模式核心概念与结构
- 二、C++ 实现示例:文本编辑器撤销功能
- 三、备忘录模式的关键特性
- 四、应用场景
- 五、备忘录模式与其他设计模式的关系
- 六、C++ 标准库中的备忘录模式应用
- 七、优缺点分析
- 八、实战案例:游戏角色状态存档
- 九、实现注意事项
- 如果这篇文章对你有所帮助,渴望获得你的一个点赞!
备忘录模式(Memento Pattern)是一种【行为型】设计模式,它允许在不破坏对象封装性的前提下,捕获并保存对象的内部状态,以便后续可以将对象恢复到先前的状态。这种模式通过将状态保存和恢复操作分离,实现了对象状态管理的职责分离。
一、模式核心概念与结构
备忘录模式包含三个核心角色:
- 原发器(Originator):创建备忘录并使用备忘录恢复内部状态的对象。
- 备忘录(Memento):存储原发器内部状态的对象,通常提供有限的访问权限。
- 管理者(Caretaker):负责保存备忘录,但不检查或修改备忘录的内容。
二、C++ 实现示例:文本编辑器撤销功能
以下是一个简单的文本编辑器示例,演示如何使用备忘录模式实现撤销功能:
#include <iostream>
#include <string>
#include <memory>
#include <vector>// 前向声明
class Memento;// 原发器:文本编辑器
class TextEditor {
private:std::string content;public:void setContent(const std::string& text) {content = text;std::cout << "Current content: " << content << std::endl;}std::string getContent() const {return content;}// 创建备忘录std::shared_ptr<Memento> createMemento() const;// 从备忘录恢复void restoreFromMemento(std::shared_ptr<Memento> memento);
};// 备忘录
class Memento {
private:std::string savedContent;public:Memento(const std::string& content) : savedContent(content) {}// 仅供原发器访问的内部状态friend class TextEditor;
};// 实现原发器的方法
std::shared_ptr<Memento> TextEditor::createMemento() const {return std::make_shared<Memento>(content);
}void TextEditor::restoreFromMemento(std::shared_ptr<Memento> memento) {content = memento->savedContent;std::cout << "Restored content: " << content << std::endl;
}// 管理者:历史记录
class History {
private:std::vector<std::shared_ptr<Memento>> mementos;public:void saveState(std::shared_ptr<Memento> memento) {mementos.push_back(memento);std::cout << "State saved. History size: " << mementos.size() <<