• 备忘录模式(Memento)


    参考:

    [备忘录设计模式 (refactoringguru.cn)](https://refactoringguru.cn/design-patterns/mediator)

    一、什么是备忘录模式

    在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前某个时间点的状态。如果使用一些公有接口来让其它对象得到对象的状态,便会暴露对象的细节实现。

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

    例如编辑器中保存的内容,可能一些历史修改的快照,用户可以通过撤消恢复历史编辑的内容。

    在这里插入图片描述

    二、实现

    备忘录(Memento)模式包含以下主要角色:

    1、原发器(Originator):可以生成自身状态的快照, 也可以在需要时通过快照恢复自身状态。
    2、备忘录(Memento):用于存储Originator角色的内部状态,且可以防止Originator以外的对象进行访问。
    3、负责人(Caretaker):负责存储,管理备忘录功能。且其本身应该无法对备忘录的内容进行访问。

    在这里插入图片描述

    #include 
    #include 
    using namespace std;
    
    class Memento
    {
        string state;
    public:
        Memento(const string &s) : state(s) {}
        string getState() const { return state; }
        void setState(const string &s) { state = s; }
    };
    
    class Originator
    {
        string state;
    public:
        Originator() {}
        Mmento creatMemento() { return Memento(state); }
        void setMemento(const Memento &m) { state = m.getState(); }
    }
    
    int main()
    {
        Originator originator;
        Memento mem = originator.createMemento();
        // do something ...
        originator.setMemento(memento);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    三、优缺点

    优点

    • 可以在不破坏对象封装情况的前提下创建对象状态快照。
    • 可以通过让负责人维护原发器状态历史记录来简化原发器代码。

    缺点

    • 如果客户端过于频繁地创建备忘录, 程序将消耗大量内存。
    • 负责人必须完整跟踪原发器的生命周期, 这样才能销毁弃用的备忘录。

    四、适用环境

    • 当你需要创建对象状态快照来恢复其之前的状态时, 可以使用备忘录模式。
    • 当直接访问对象的成员变量、 获取器或设置器将导致封装被突破时,可以使用该模式。
  • 相关阅读:
    display属性详解及用法
    element树形控件单选
    Lumion和Enscape渲染器有什么区别?哪个适合你
    UML(类图进阶和对象图)
    《回炉重造》——Lambda表达式
    WPF 控件专题 Ellipse详解
    计算机网络 | 数据链路层
    在Linux中,怎么查看自己电脑的系统架构是什么?
    图神经网络关系抽取论文阅读笔记(五)
    给饿了么Radio 单选框添加点击事件
  • 原文地址:https://blog.csdn.net/I_just_smile/article/details/128211916