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

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

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

2020-05-23 13:31:03
字體:
來源:轉載
供稿:網友

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

作用

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

類視圖

C++,設計模式,備忘錄模式

實現

 

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

應用場景

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武安市| 鄂州市| 团风县| 临夏市| 江津市| 响水县| 蓬莱市| 兴业县| 沐川县| 通辽市| 唐河县| 高台县| 寿阳县| 江山市| 汉源县| 平山县| 南乐县| 吴堡县| 个旧市| 台中县| 勃利县| 普格县| 乳源| 定州市| 宜兰市| 黑山县| 赤壁市| 五峰| 舞阳县| 江油市| 逊克县| 常宁市| 黄平县| 迁安市| 尉犁县| 化德县| 韶山市| 江川县| 漳平市| 巧家县| 铜川市|