国产探花免费观看_亚洲丰满少妇自慰呻吟_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武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长治县| 贡山| 上虞市| 大埔县| 林甸县| 漯河市| 长治县| 麦盖提县| 中西区| 洛隆县| 泸州市| 永安市| 两当县| 那坡县| 新平| 七台河市| 文成县| 准格尔旗| 太白县| 孟村| 柳河县| 丹东市| 凉城县| 吴川市| 武威市| 盐边县| 临猗县| 石门县| 昆山市| 岫岩| 涟水县| 祥云县| 和平区| 鄢陵县| 四川省| 越西县| 罗甸县| 确山县| 科技| 运城市| 蓝田县|