`

[行为型模式] 备忘录模式的理解

 
阅读更多




头文件
//MementoPattern.h

#ifndef MEMENTO_PATTERN_H
#define MEMENTO_PATTERN_H

#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;

namespace MementoPattern
{
    //备忘者类备份发起者的状态
    class Memento
    {
    public:
        //构造的时候备份数据
        Memento(string strState):m_strState(strState){    }

        void SetState(string strState){ m_strState = strState; }

        friend class Originator;

    private:
        string m_strState;
    };

    //发起者类备份自己的状态
    class Originator
    {
    public:
        //建立备份
        Memento* CreateBackups(){ return new Memento(m_strState); }

        //恢复备份内容
        void RestoreBackups(Memento* pMemento)
        {
            m_strState = pMemento->m_strState;
        }

        //显示状态
        void Show()
        {
            cout<<m_strState<<endl;
        }

        void SetState(string strState){ m_strState = strState; }

    private:
        string m_strState;
    };

    //管理者类管理备份
    class Caretaker
    {
    public:
        //得到备份
        Memento* GetMemento()
        {
            return m_pMemento;
        }
        //设置备份
        void SetMemento(Memento* pMemento)
        {
            m_pMemento = pMemento;
        }

    private:
        Memento* m_pMemento;
    };

    //////////////////////////////////////////////////////////////////////////
    void MementoPattern_Test();
}

#endif


实现
#include "MementoPattern.h"
#include <iostream>
using namespace std;

namespace MementoPattern
{
    //////////////////////////////////////////////////////////////////////////
    void MementoPattern_Test()
    {
        //设置和显示状态
        Originator o;
        o.SetState("ON");
        o.Show();

        //创建备份
        Memento* m = o.CreateBackups();

        //管理备份
        Caretaker c;
        c.SetMemento(m);

        //设置和显示状态
        o.SetState("OFF");
        o.Show();

        //恢复备份
        m = c.GetMemento();
        o.RestoreBackups(m);

        //显示状态
        o.Show();
    }
}


客户端
#include "MementoPattern.h"
#include <iostream>
#include <sstream>
#include <string>
#include <list>
using namespace std;
using namespace MementoPattern;

void  main()
{
    MementoPattern_Test();
}


运行结果
分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...

    设计模式_行为型_备忘录模式.md

    备忘录模式(Memento)是一种行为型设计模式,它允许在不暴露对象的实现细节的情况下,捕获并保存对象的内部状态,从而可以在未来某个时刻恢复到之前的状态。备忘录模式特别适用于实现撤销操作,或是需要进行状态...

    备忘录模式.rar备忘录模式.rarjava设计模式

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作历史或者游戏进度...

    设计模式之备忘录模式

    备忘录模式(Memento Pattern)是软件设计模式中的一种,属于行为模式。它提供了一种方式来恢复对象到之前的状态,即“撤销”操作。备忘录模式的核心思想是保存对象的内部状态,以便在需要时能恢复到这个状态,而...

    设计模式之备忘录(memento)

    通过查看这些内容,你可以进一步加深对备忘录模式的理解,并将其应用到自己的项目中。 总的来说,备忘录模式提供了一种优雅的方式去处理对象状态的保存和恢复,保持了对象的封装性,同时也使得代码更易于维护和扩展...

    Java设计模式-备忘录

    备忘录模式是一种行为设计模式,它允许对象在不破坏封装性的前提下捕获并存储其内部状态,以便稍后恢复到该状态。这种模式常用于在游戏中保存进度、撤销/重做操作、以及在复杂业务逻辑中保存中间计算结果等场景。 ...

    设计模式之备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...

    设计模式之备忘录模式(Memento)

    备忘录模式(Memento Pattern)是设计模式中的一种行为模式,主要目的是在不违反封装原则的情况下,保存一个对象的内部状态,以便在需要时能够恢复到先前的状态。这种模式通常用于实现撤销/重做功能或者在游戏中保存...

    备忘录模式-极客学院-java-课件代码

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要撤销/重做操作的场景,或者在...

    设计模式例子备忘录模式

    备忘录模式是一种在软件工程领域广泛使用的设计模式,它属于行为设计模式,主要目的是为了在不破坏对象封装性的前提下,保存一个对象的内部状态,以便在需要时能够恢复到之前的状态。这个模式通常应用于撤销/重做...

    23种设计模式,创建型模式共5种,结构型模式7种,行为型模式11种

    7. **备忘录模式**:在不破坏封装的前提下,捕获对象的内部状态,以便之后恢复对象状态。 8. **状态模式**:允许对象在其内部状态改变时改变其行为,对象看起来似乎修改了它的类。 9. **访问者模式**:定义一个访问...

    3 备忘录模式-课程内容.rar

    备忘录模式是一种设计模式,属于行为设计模式的范畴,它的主要目的是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象到先前的状态。这种模式在许多场景下都非常有用...

    行为型模式+结构型模式+创建型模式:三大设计模式实例剖析与深入解读

    备忘录模式是其中的一种,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。这种模式常用于需要保存和恢复对象状态的情景,例如撤销/重做功能或者游戏存档。 **备忘录模式**的关键组件包括发起者...

    同心源超级备忘录源代码

    其次,事件驱动编程是桌面应用开发的常见模式,备忘录软件也不例外。在C#中,用户界面控件如按钮、文本框等都有对应的事件,当用户进行操作时,这些事件会被触发并调用相应的处理函数。例如,点击“新增”按钮可能...

    android备忘录app源码.zip

    这份源码“EverMemo-master”提供了一个完整的Android备忘录应用的实现,是深入理解Android开发,尤其是Android应用架构设计、UI构建以及数据存储的理想学习材料。 1. **项目结构分析** - `EverMemo-master`目录...

Global site tag (gtag.js) - Google Analytics