国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 13:43:46
字體:
來源:轉載
供稿:網友

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

作用

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

類視圖

實現

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

應用場景

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 镇康县| 宁阳县| 龙州县| 都兰县| 沂南县| 公安县| 武山县| 遂平县| 资源县| 新平| 宾阳县| 阳东县| 文登市| 桐城市| 宁津县| 黄石市| 夏津县| 烟台市| 巴青县| 阳原县| 若尔盖县| 襄汾县| 留坝县| 公安县| 富平县| 稻城县| 集贤县| 前郭尔| 黄浦区| 资源县| 高要市| 枣强县| 承德市| 德惠市| 辽阳市| 柞水县| 卢湾区| 乡城县| 永胜县| 阿鲁科尔沁旗| 怀宁县|