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