Memento (C++实现)

    技术2022-06-12  50

    // Memento.cpp : 定义控制台应用程序的入口点。//

    #include "stdafx.h"#include <iostream>#include <string>

     

    using namespace std;

     

    typedef string STATE;

     

    class Memento;

    class Originator{public: Originator(){} Originator(const STATE& st):m_state(st) { } virtual ~Originator(){}

     Memento* CreateMemento();

     void SetMemento(Memento* pMemeto);

     STATE getState() {  return m_state; }

     void setState(const STATE& st  ) {  m_state=st; }

     void printState() {  cout<<m_state<<endl; }

    private: STATE  m_state;

    };

     

    class Memento{private: friend class Originator; Memento(const STATE& st); 

     void setState(const STATE& st) {   m_state=st; }

     STATE getState();  STATE  m_state;};

     

    Memento::Memento(const STATE& st) {   m_state=st; }

    STATE Memento::getState() {  return m_state; }

    void Originator::SetMemento(Memento* pMemento) {  if(NULL!=pMemento)   m_state=pMemento->getState(); }

    Memento *Originator::CreateMemento() {  return new Memento(m_state); }

     

    int _tmain(int argc, _TCHAR* argv[]){  // 创建一个原发器 Originator* pOriginator = new Originator("old state"); pOriginator->printState();

     // 创建一个备忘录存放这个原发器的状态 Memento *pMemento = pOriginator->CreateMemento();  // 更改原发器的状态 pOriginator->setState("new state"); pOriginator->printState();

     // 通过备忘录把原发器的状态还原到之前的状态 pOriginator->SetMemento(pMemento); pOriginator->printState();

     delete pOriginator; delete pMemento;

     return 0;}

     


    最新回复(0)