91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-09-13 21:58:00 來源:腳本之家 閱讀:125 作者:chencarl 欄目:編程語言

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

作用

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

類視圖

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

實現

typedef struct sysstate; //假設的一個空結構,用來代表系統狀態

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

//運行系統
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;
 //備份系統并存入備份管理器中
 long time1 = controler.addRecoveryPoint(Sys.backup());
 long time2 = controler.addRecoveryPoint(Sys.backup());

 //將系統恢復到time1狀態
 Sys.recovery(controler.GetRecoveryPoint(time1));

 //將系統恢復到time2狀態
 Sys.recovery(controler.GetRecoveryPoint(time2));

}

應用場景

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长治县| 屏东县| 河北区| 平昌县| 鹤庆县| 丰原市| 姚安县| 常宁市| 珠海市| 句容市| 长丰县| 濮阳市| 东兰县| 吉首市| 柳江县| 长葛市| 株洲县| 周口市| 云和县| 时尚| 治多县| 沧源| 沾化县| 香河县| 甘洛县| 阿拉善右旗| 富裕县| 石渠县| 南开区| 平阴县| 长宁县| 合水县| 柘城县| 城口县| 城固县| 裕民县| 扎鲁特旗| 莆田市| 临朐县| 赤峰市| 包头市|