(十三)备忘录模式
1. 定義
備忘錄(Memento),在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài),并在該對象之外保存這個狀態(tài)。這樣以后就可將該對象恢復到原先保存的狀態(tài)。[DP]
- Originator(發(fā)起人),負責創(chuàng)建一個備忘錄(Memento),用以記錄當前時刻它的內(nèi)部狀態(tài),并可使用備忘錄恢復內(nèi)部狀態(tài)。Originator可根據(jù)需要決定Memento存儲Originator的哪些內(nèi)部狀態(tài);
- Memento(備忘錄),負責存儲Originator對象的內(nèi)部狀態(tài),并可防止Originator以外的其他對象訪問備忘錄Memento;
- Caretaker(管理者),負責保存好備忘錄(Memento),不能對備忘錄的內(nèi)容進行操作或查看;
2. 示例
#include <iostream> #include <string>struct State {std::string m_switch;std::string m_other; };class Memento { public:Memento(State s) :m_state(s){}State GetState(){ return m_state; } private:State m_state; };class Originator { public:Memento* CreateMemento(){return new Memento(m_state);}void Recovery(Memento *m){m_state = m->GetState();}void SetState(const State &s){m_state = s;}void Show(){std::cout << "state is " << m_state.m_switch << std::endl;} private:State m_state; };class Caretaker { public:void SetMemento(Memento *m){m_memento = m;}Memento* GetMemento(){return m_memento;} private:Memento *m_memento; };void Client() {Originator* o = new Originator();o->SetState(State{ "on", "" });o->Show();Memento* m = o->CreateMemento();Caretaker c;c.SetMemento(m);o->SetState(State{ "off", "" });o->Show();o->Recovery(c.GetMemento());o->Show();delete o;delete m; }int main() {Client();return 0; }3. 總結(jié)
備忘錄模式最常見的是用于游戲存檔。
轉(zhuǎn)載于:https://www.cnblogs.com/walkinginthesun/p/9558004.html
總結(jié)
- 上一篇: Redis-参数说明
- 下一篇: docker基础命令