設計模式(十四)備忘錄模式
阿新 • • 發佈:2019-02-15
(十四)備忘錄模式
在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。
備忘錄模式比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性中的一小部分時,發起人可以根據儲存的備忘錄資訊還原到前一狀態。
#include <iostream> #include <string> using namespace std; //(十四)備忘錄模式 //在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。 //備忘錄模式比較適用於功能比較複雜的,但需要維護或記錄屬性歷史的類,或者需要儲存的屬性只是眾多屬性中的一小部分時,發起人可以根據儲存的備忘錄資訊還原到前一狀態。 //備忘錄類 class Memo { private: string state; public: Memo(string strState) { state= strState; } string get() { return state; } }; //發起人類 class Originator { private: string state; public: Memo* CreateMemo() { return new Memo(state); } void SetMemo(Memo* memo) { state = memo->get(); } void Setstate(string st) { state=st; } void Show() { cout<<"狀態:"<<state<<endl; } }; //管理者類 class Caretaker { private: Memo* memo; public: void SetMemo(Memo* m) { memo=m; } Memo* GetMemo() { return memo; } }; //客戶端: int main() { Originator* on=new Originator(); on->Setstate("on"); on->Show(); Caretaker* c= new Caretaker(); c->SetMemo(on->CreateMemo()); on->Setstate("off"); on->Show(); on->SetMemo(c->GetMemo()); on->Show(); return 0; }