設計形式中的備忘錄形式解析及相干C++實例運用。本站提示廣大學習愛好者:(設計形式中的備忘錄形式解析及相干C++實例運用)文章只能為提供參考,不一定能成為您想要的結果。以下是設計形式中的備忘錄形式解析及相干C++實例運用正文
備忘錄形式旨在不損壞封裝性的條件下,捕捉一個對象的外部狀況,並在該對象以外保留這個狀況。如許今後便可將該對象恢復到本來保留的狀況。在敕令形式中,備忘錄形式常常還常常被用來保護可以撤消(Undo)操作的狀況。
類圖:
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; }
輸入是如許的
備忘錄形式實用性: