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





头文件
//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();
}


运行结果

猜你喜欢

转载自jacky-dai.iteye.com/blog/2309027