Memento (C++實現)

來源:互聯網
上載者:User

// 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;
}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.