欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當前位置:主頁 > 軟件編程 > C語言 >

C++設(shè)計模式之備忘錄模式(Memento)

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C語言|點擊: 次

當我們在實際應用中需要提供撤銷機制,當一個對象可能需要再后續(xù)操作中恢復其內(nèi)部狀態(tài)時,就需要使用備忘錄模式。其本質(zhì)就是對象的序列化和反序列化的過程,支持回滾操作。

作用

在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài),這樣以后就可以將該對象恢復到原先的狀態(tài)。

類視圖

實現(xiàn)

typedef struct sysstate; //假設(shè)的一個空結(jié)構(gòu),用來代表系統(tǒng)狀態(tài)

//還原點
class Memento
{
public:
 Memento(sysstate &statein)
 {
  state = statein;
 }
 sysstate& getstate(){ return state}
private:
 sysstate state;
};

//運行系統(tǒng)
class system
{
public:
 void recovery(Memento* pMem)
 {
  if (pMem)
  {
   state = pMem->getstate();
  }  
 }
 Memento* backup()
 {
  return new Memento(state);
 }
private:
 sysstate state;
};

//還原控制器
class recoveryControl
{
public:
 ~recoveryControl()
 {
  map<long,Memento*>::iterator iter; 
  for ( iter = m_mementos.begin(); iter != m_mementos.end(); iter++)
  {
   delete iter.second;
  }
 }
 long addRecoveryPoint(Memento* pMem)
 {
  long t = clock();
  m_mementos.instert(pair<long,Memento*>(t, pMem));
  return t;
 }
 Memento* GetRecoveryPoint(long time)
 {
  map<long,Memento*>::iterator iter; 
 
  iter = m_mementos.find(time); 
 
  if(iter != m_mementos.end()) 
   return iter->second; 
  return NULL;
 }
 void DelRecoveryPoint(long time)
 {
  Memento* pMem = GetRecoveryPoint(time);
  m_mementos.erase(time);  
  delete pMem;
 }
private:
 map<long,Memento*> m_mementos;
};

int main()
{
 system Sys;
 recoveryControl controler;
 //備份系統(tǒng)并存入備份管理器中
 long time1 = controler.addRecoveryPoint(Sys.backup());
 long time2 = controler.addRecoveryPoint(Sys.backup());

 //將系統(tǒng)恢復到time1狀態(tài)
 Sys.recovery(controler.GetRecoveryPoint(time1));

 //將系統(tǒng)恢復到time2狀態(tài)
 Sys.recovery(controler.GetRecoveryPoint(time2));

}

應用場景

支持回滾操作的 地方,如游戲存檔、事務回滾、程序的撤銷和恢復操作等。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持我們。

上一篇:迷宮游戲控制臺版C++代碼

欄    目:C語言

下一篇:C++中const與#define的利弊分析

本文標題:C++設(shè)計模式之備忘錄模式(Memento)

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/821.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有