[behavioral pattern] understanding of memorandum pattern





head File
//MementoPattern.h

#ifndef MEMENTO_PATTERN_H
#define MEMENTO_PATTERN_H

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

namespace MementoPattern
{
    //The memoizer class backs up the status of the initiator
    class Memento
    {
    public:
        // backup data when constructing
        Memento(string strState):m_strState(strState){    }

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

        friend class Originator;

    private:
        string m_strState;
    };

    // The initiator class backs up its own state
    class Originator
    {
    public:
        //create backup
        Memento* CreateBackups(){ return new Memento(m_strState); }

        // restore backup content
        void RestoreBackups(Memento* pMemento)
        {
            m_strState = pMemento->m_strState;
        }

        //Display state
        void Show()
        {
            cout<<m_strState<<endl;
        }

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

    private:
        string m_strState;
    };

    //Manager class manages backups
    class Caretaker
    {
    public:
        // get backup
        Memento* GetMemento()
        {
            return m_pMemento;
        }
        //set backup
        void SetMemento(Memento* pMemento)
        {
            m_pMemento = pMemento;
        }

    private:
        Memento* m_pMemento;
    };

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

#endif


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

namespace MementoPattern
{
    //////////////////////////////////////////////////////////////////////////
    void MementoPattern_Test()
    {
        //set and display status
        Originator o;
        o.SetState("ON");
        o.Show();

        //create backup
        Memento* m = o.CreateBackups();

        //manage backups
        Caretaker c;
        c.SetMemento(m);

        //set and display status
        o.SetState("OFF");
        o.Show();

        // restore backup
        m = c.GetMemento();
        o.RestoreBackups(m);

        //Display state
        o.Show();
    }
}


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

void  main()
{
    MementoPattern_Test();
}


operation result

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326780594&siteId=291194637