亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

設計模式中的備忘錄模式解析及相關C++實例應用

2020-05-23 14:07:38
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了設計模式中的備忘錄模式解析及相關C++實例應用,備忘錄模式也經常被用來在命令模式中維護可以撤銷(Undo)操作的狀態,需要的朋友可以參考下
 

備忘錄模式旨在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態。這樣以后就可將該對象恢復到原先保存的狀態。在命令模式中,備忘錄模式經常還經常被用來維護可以撤銷(Undo)操作的狀態。

類圖:

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

  • Originator:負責創建一個備忘錄Memento,用以記錄當前時刻它的內部狀態,并可使用備忘錄恢復內部狀態。Originator可根據需要決定Memento存儲Originator的哪些內部狀態。
  • Memento:負責存儲Originator對象的內部狀態,并可防止Originator以外的其他對象訪問備忘錄Memento。備忘錄有兩個接口,Caretaker只能看到備忘錄的窄接口,它只能將備忘錄傳遞給其他對象。Originator能夠看到一個寬接口,允許它訪問返回到先前狀態所需的所有數據。
  • Caretaker:負責保存好備忘錄Memento,不能對備忘錄的內容進行操作或檢查。

Memento模式中封裝的是需要保存的狀態,當需要恢復的時候才取出來進行恢復.原理很簡單,實現的時候需要注意一個地方:窄接口和寬接口.所謂的寬接口就是一般意義上的接口,把對外的接口作為public成員;而窄接口反之,把接口作為private成員,而把需要訪問這些接口函數的類作為這個類的友元類,也就是說接口只暴露給了對這些接口感興趣的類,而不是暴露在外部.下面的實現就是窄實現的方法來實現的.

Memento模式比較適用于功能比較復雜的,但需要維護或記錄歷史屬性的類,或者需要保存的屬性只是眾多屬性中的一小部分時,Originator可以根據保存的Memento信息還原到前一狀態。

如果在某個系統中使用命令模式時,需要實現命令的撤銷功能,那么命令模式可以使用備忘錄模式來存儲可撤銷操作的狀態。
實例:

#include <iostream> #include <string> using namespace std;  class Memento { private:   string state;  public:   Memento(string state)     :state(state)   {}   string GetState()   {     return state;   }   void SetState(string state)   {     this->state = state;   } };  class CareTaker { private:   Memento *memento;  public:   void SetMemento(Memento *memento)   {     this->memento = memento;   }   Memento* GetMemento()   {     return this->memento;   } };  class Originator { private:   string state;    public:   Originator(string state)   {     this->state = state;   }    void RestoreMemento(Memento *memento)   {     state = memento->GetState();   }    Memento *CreateMemento()   {     return new Memento(state);   }    void SetState(string state)   {     this->state = state;   }    void ShowState()   {     cout<< this->state <<endl;   } };  int main() {   Originator *originator = new Originator("2012年11月11日,光棍節,一個人,沒有女朋友");   CareTaker *caretaker = new CareTaker();   caretaker->SetMemento(originator->CreateMemento());      cout<<"2012年11月11日,光棍節早晨的狀態是:"<<endl;    originator->ShowState();    originator->SetState("中午參加同學婚禮去了,錦府鹽幫飯店");   originator->ShowState();    cout<<"晚上回來的狀態是"<<endl;   originator->RestoreMemento(caretaker->GetMemento());   originator->ShowState();    cout<<"跟早晨一樣,嗨"<<endl;    system("pause");   return 0; } 

輸出是這樣的

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

 

備忘錄模式適用性:

  • 必須保存一個對象在某一個時刻的(部分)狀態, 這樣以后需要時它才能恢復到先前的狀態。
  • 如果一個用接口來讓其它對象直接得到這些狀態,將會暴露對象的實現細節并破壞對象的封裝性。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕成人在线| 日韩av免费看网站| 69久久夜色精品国产7777| 性色av一区二区三区在线观看| 91精品国产色综合久久不卡98| 国产日韩欧美中文在线播放| 久久91亚洲精品中文字幕奶水| 91亚洲精品在线观看| 欧美大片免费观看| 国产精品1区2区在线观看| 成人在线观看视频网站| 国内偷自视频区视频综合| 国产精品影片在线观看| 亚洲欧洲国产一区| 国产美女精品免费电影| 国产精品综合久久久| 精品中文字幕乱| 国产精品男人爽免费视频1| 国产精品久久久久av免费| 国产成人avxxxxx在线看| 91久久国产综合久久91精品网站| 欧美午夜丰满在线18影院| 国产午夜精品全部视频在线播放| 国产精品久久久久久久久粉嫩av| 欧美性xxxxxx| 亚洲国产精品悠悠久久琪琪| 成人观看高清在线观看免费| 亚洲国产成人91精品| 久久精品人人做人人爽| 97人人做人人爱| 欧美黑人xxxⅹ高潮交| 亚洲一区二区三区四区在线播放| 久久久精品国产亚洲| 亚洲视频精品在线| 九色成人免费视频| 亚洲精品久久久久久久久久久久久| 亚洲人成啪啪网站| 亚洲美女性视频| 国产精品免费视频久久久| 欧美成人精品一区二区三区| 精品久久国产精品| 亚洲在线观看视频网站| 九九视频直播综合网| 国产亚洲精品成人av久久ww| 亚洲成人国产精品| 国产精品对白刺激| 91成人免费观看网站| 日韩激情av在线播放| 国内精品视频一区| 久久久久久有精品国产| 国产丝袜一区二区| 日韩成人在线网站| 欧洲成人性视频| 中文在线不卡视频| 亚洲国产精品高清久久久| 色先锋资源久久综合5566| 久久成人精品一区二区三区| 26uuu另类亚洲欧美日本一| 国产97免费视| 亚洲免费小视频| 久久久亚洲网站| 欧美成人免费小视频| 欧美xxxx14xxxxx性爽| 日韩在线观看免费高清| 成人啪啪免费看| 日韩成人av网址| 成人性生交xxxxx网站| 日韩黄色高清视频| 91精品国产乱码久久久久久蜜臀| 色与欲影视天天看综合网| 亚洲第一av网| 91高清在线免费观看| 日韩av片永久免费网站| 国产亚洲精品成人av久久ww| 中文字幕不卡在线视频极品| 成人免费淫片视频软件| 国产精品欧美激情| 亚洲天堂av在线免费| 久久躁日日躁aaaaxxxx| 成人精品一区二区三区电影免费| 黑人巨大精品欧美一区二区一视频| 亚洲欧洲视频在线| 欧美国产日韩一区| 精品自拍视频在线观看| 欧美高清无遮挡| 国产精品一区二区女厕厕| 91精品国产91久久久久福利| 91热精品视频| 98精品国产自产在线观看| 91精品久久久久久久久久久久久久| 欧美华人在线视频| 最新的欧美黄色| 在线播放日韩欧美| www国产亚洲精品久久网站| 91av在线影院| 久久亚洲精品毛片| 欧美日韩一二三四五区| 91午夜理伦私人影院| 欧美高清视频免费观看| 欧美日韩另类字幕中文| 日本免费一区二区三区视频观看| 成人美女av在线直播| 在线免费看av不卡| 日韩成人久久久| 在线成人激情视频| 疯狂欧美牲乱大交777| 欧美xxxx14xxxxx性爽| 欧美日韩一区二区三区在线免费观看| 国产激情999| 欧美激情成人在线视频| 亚洲系列中文字幕| 欧美亚洲视频在线看网址| 成人精品视频在线| 欧美一区二区大胆人体摄影专业网站| 亚洲一区二区三区四区在线播放| 青青a在线精品免费观看| 日韩中文字幕国产精品| 欧美在线精品免播放器视频| 午夜精品久久久久久久99热| 深夜福利国产精品| 91在线观看免费观看| 中文字幕9999| 精品久久久av| 欧美床上激情在线观看| 亚洲国产精品人人爽夜夜爽| 在线观看精品国产视频| 日韩成人久久久| 欧美美女15p| 精品国产精品三级精品av网址| 欧美亚洲在线视频| 国产91网红主播在线观看| 国产一区二区色| 欧美黑人性视频| 国产精品精品一区二区三区午夜版| 亚洲国产精品yw在线观看| 日韩精品免费综合视频在线播放| 欧美在线视频免费| 成人a免费视频| 欧美xxxx14xxxxx性爽| 91在线视频九色| 国外成人免费在线播放| 亚洲视频专区在线| 日韩av有码在线| 久久九九热免费视频| 欧美亚洲午夜视频在线观看| 亚洲成年网站在线观看| 91a在线视频| 在线播放国产一区二区三区| 97色在线视频| 亚洲精品456在线播放狼人| 欧美一级视频一区二区| 亚洲激情中文字幕| 亚洲精品黄网在线观看| 91国产在线精品| 国产丝袜精品视频| 国产精品久久久久久亚洲调教| 亚洲影视中文字幕| 九九热精品在线| 国产人妖伪娘一区91| 国产极品jizzhd欧美| 日韩av影院在线观看| 国产精品老牛影院在线观看| xvideos成人免费中文版| 欧美激情一区二区三区在线视频观看|