设计模式——备忘录模式

一、备忘录模式介绍

备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

二、示例场景

假设有一个文本编辑器,用户可以在其中输入文本,并随时保存当前的文本状态,以便在需要时恢复到之前的状态。

三、具体实现

定义备忘录类(Memento):

cpp 复制代码
class TextMemento {
public:
    TextMemento(const std::string& text) : text(text) {}
    std::string getText() const { return text; }
private:
    std::string text;
};

这个类用于存储文本编辑器的状态,即文本内容。

定义原发器类(Originator):

cpp 复制代码
class TextEditor {
public:
    void setText(const std::string& newText) { text = newText; }
    TextMemento save() { return TextMemento(text); }
    void restore(const TextMemento& memento) { text = memento.getText(); }
    std::string getText() const { return text; }
private:
    std::string text;
};

原发器类代表文本编辑器,它有设置文本、保存当前状态为备忘录以及从备忘录恢复状态的方法。

定义管理者类(Caretaker):

cpp 复制代码
class Caretaker {
public:
    void addMemento(const TextMemento& memento) { mementos.push_back(memento); }
    TextMemento getMemento(int index) const { return mementos[index]; }
private:
    std::vector<TextMemento> mementos;
};

管理者类用于存储多个备忘录对象,以便在需要时获取特定的备忘录来恢复文本编辑器的状态。

使用这些类:

cpp 复制代码
int main() {
    TextEditor editor;
    Caretaker caretaker;

    editor.setText("Hello, world!");
    caretaker.addMemento(editor.save());

    editor.setText("Goodbye!");
    caretaker.addMemento(editor.save());

    editor.restore(caretaker.getMemento(0));
    std::cout << "Restored text: " << editor.getText() << std::endl;

    return 0;
}

在主函数中,创建了一个文本编辑器和一个管理者对象。首先设置文本内容并保存状态到管理者中,然后再次设置文本内容并保存状态。最后,恢复到第一个保存的状态并输出恢复后的文本内容。

通过这个例子,可以看到备忘录模式使得在不暴露对象内部结构的情况下,能够方便地保存和恢复对象的状态。

相关推荐
程序员JerrySUN2 小时前
设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用
设计模式·组合模式
碎梦归途2 小时前
23种设计模式-创建型模式之工厂方法模式(Java版本)
java·设计模式·工厂方法模式
XU磊2603 小时前
Java 工厂设计模式详解:用统一入口打造灵活可扩展的登录系统----掌握 Spring 源码的基础第一步
java·设计模式
匹马夕阳3 小时前
java开发中的设计模式之工厂模式
java·设计模式
Pasregret3 小时前
设计模式入门:从 GoF 分类到 SOLID 原则实战
java·设计模式
Light606 小时前
Python依赖注入完全指南:高效解耦、技术深析与实践落地
python·设计模式·单元测试·fastapi·依赖注入·解耦
都叫我大帅哥7 小时前
代码界的「俄罗斯套娃」:组合模式的嵌套艺术
java·后端·设计模式
渊渟岳10 小时前
为了掌握设计模式,开发了一款Markdown 文本编辑器软件(已开源)
java·设计模式
邪恶的贝利亚14 小时前
设计模式实践:模板方法、观察者与策略模式详解
设计模式·策略模式
匹马夕阳18 小时前
Java开发中的设计模式之观察者模式详细讲解
java·观察者模式·设计模式