【C++】备忘录模式

发布于:2025-07-02 ⋅ 阅读:(24) ⋅ 点赞:(0)

备忘录模式(Memento Pattern)是一种【行为型】设计模式,它允许在不破坏对象封装性的前提下,捕获并保存对象的内部状态,以便后续可以将对象恢复到先前的状态。这种模式通过将状态保存和恢复操作分离,实现了对象状态管理的职责分离。

一、模式核心概念与结构

备忘录模式包含三个核心角色:

  1. 原发器(Originator):创建备忘录并使用备忘录恢复内部状态的对象。
  2. 备忘录(Memento):存储原发器内部状态的对象,通常提供有限的访问权限。
  3. 管理者(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() <<

网站公告

今日签到

点亮在社区的每一天
去签到