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