最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年04月15日 15:38:07   作者:chencarl  
這篇文章主要為大家詳細介紹了C++設計模式之備忘錄模式Memento的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

作用

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

類視圖

實現(xiàn)

typedef struct sysstate; //假設的一個空結構,用來代表系統(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));

}

應用場景

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

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

相關文章

  • C++實現(xiàn)將內容寫入文件的方法總結

    C++實現(xiàn)將內容寫入文件的方法總結

    本文主要總結了一下C/C++將內容寫入文件的方法,C的方法有些單調,畢竟沒有庫函數(shù)。C++則豐富些,下面我把搜集到的整理一下,供大家參考
    2023-04-04
  • 詳解Matlab繪制3D玫瑰花的方法(內附旋轉版本)

    詳解Matlab繪制3D玫瑰花的方法(內附旋轉版本)

    這篇文章主要為大家介紹了如何利用Matlab繪制3D版的玫瑰花以及旋轉版的3D玫瑰花,文中的示例代碼講解詳細,感興趣的小伙伴可以動手試一試
    2022-03-03
  • C++實現(xiàn)連連看游戲

    C++實現(xiàn)連連看游戲

    這篇文章主要為大家詳細介紹了C++實現(xiàn)連連看游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C語言數(shù)據(jù)結構與算法時間空間復雜度基礎實踐

    C語言數(shù)據(jù)結構與算法時間空間復雜度基礎實踐

    這篇文章主要為大家介紹了C語言數(shù)據(jù)結構與算法中時間空間復雜度的基礎實踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-02-02
  • C++?system()函數(shù)的常用用法(全網(wǎng)最新)

    C++?system()函數(shù)的常用用法(全網(wǎng)最新)

    system()用于從C?/C++程序調用操作系統(tǒng)命令,這里給大家講解下C++?system()函數(shù)的常用用法,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • C語言關鍵字const和指針的結合使用

    C語言關鍵字const和指針的結合使用

    這篇文章主要介紹了C語言關鍵字const和指針的結合,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 詳細分析C++ 多態(tài)和虛函數(shù)

    詳細分析C++ 多態(tài)和虛函數(shù)

    這篇文章主要介紹了C++ 多態(tài)和虛函數(shù)的相關資料,文中示例代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C語言中getchar和putchar的使用方法詳解

    C語言中getchar和putchar的使用方法詳解

    我們知道scanf函數(shù)可以從鍵盤輸入信息,而printf則可以輸出信息,同樣地,getchar和putchar也有同樣的功能,下面我來給大家介紹putchar和getchar的使用方法,需要的朋友可以參考下
    2023-08-08
  • C語言?使用qsort函數(shù)來進行快速排序

    C語言?使用qsort函數(shù)來進行快速排序

    排序方法有很多種:選擇排序,冒泡排序,歸并排序,快速排序等。?看名字都知道快速排序是目前公認的一種比較好的排序算法。因為他速度很快,所以系統(tǒng)也在庫里實現(xiàn)這個算法,便于我們的使用。?這就是qsort函數(shù)
    2022-02-02
  • c語言 跳臺階問題的解決方法

    c語言 跳臺階問題的解決方法

    本篇文章是對c語言中跳臺階問題的解決方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

马尔康县| 海阳市| 同江市| 大新县| 余江县| 博白县| 文山县| 资讯 | 嘉禾县| 佛学| 泾源县| 鄂伦春自治旗| 文水县| 乌拉特前旗| 紫金县| 青田县| 万荣县| 衡水市| 台北县| 中方县| 瓦房店市| 铁岭市| 定结县| 泸定县| 平阳县| 陵水| 垫江县| 东乌珠穆沁旗| 景宁| 九江县| 高邑县| 文登市| 香港 | 游戏| 罗定市| 凌源市| 龙南县| 富民县| 中宁县| 中西区| 闻喜县|