設計形式中的備忘錄形式解析及相干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;
}
輸入是如許的
備忘錄形式實用性: