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

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

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

當(dāng)我們?cè)趯?shí)際應(yīng)用中需要提供撤銷(xiāo)機(jī)制,當(dāng)一個(gè)對(duì)象可能需要再后續(xù)操作中恢復(fù)其內(nèi)部狀態(tài)時(shí),就需要使用備忘錄模式。其本質(zhì)就是對(duì)象的序列化和反序列化的過(guò)程,支持回滾操作。

作用

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

類(lèi)視圖

實(shí)現(xiàn)

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

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

//運(yùn)行系統(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)恢復(fù)到time1狀態(tài)
 Sys.recovery(controler.GetRecoveryPoint(time1));

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

}

應(yīng)用場(chǎng)景

支持回滾操作的 地方,如游戲存檔、事務(wù)回滾、程序的撤銷(xiāo)和恢復(fù)操作等。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

香港| 石嘴山市| 贵德县| 咸丰县| 新安县| 福安市| 凌云县| 绥滨县| 大城县| 民和| 昆明市| 商水县| 伊吾县| 新丰县| 永丰县| 保定市| 乳源| 白城市| 深泽县| 聂拉木县| 绥滨县| 晋宁县| 宁安市| 静安区| 怀远县| 家居| 临夏市| 怀来县| 兴城市| 西乌| 新竹市| 铜川市| 靖边县| 东乌| 安义县| 彭水| 文山县| 英德市| 深水埗区| 昌吉市| 十堰市|