1.备忘录模式简介
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。
2.源码实现
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class STMemento
{
private:
int iVitality;
public:
STMemento(){};
STMemento(int iVitality)
{
this->iVitality = iVitality;
}
int GetVitality() const
{
return this->iVitality;
}
};
class STOriginator
{
private:
int iVitality;
string name;
public:
STOriginator(string strName, int iVit) : iVitality(iVit), name(strName)
{
}
STMemento *SaveState()
{
return new STMemento(iVitality);
}
void RecoverState(const STMemento *stMemento)
{
this->iVitality = stMemento->GetVitality();
}
void SetVitality(int iVit)
{
this->iVitality = iVit;
}
void Show()
{
cout << "Name: " << name << endl;
cout << "Live: " << iVitality << endl;
}
};
class STCareTaker
{
private:
vector<STMemento *> vecStMemento;
public:
void AddMemento(STMemento *stMemento)
{
vecStMemento.push_back(stMemento);
}
STMemento *GetMemento(int index)
{
if(index >= vecStMemento.size())
return NULL;
else
return vecStMemento[index];
}
};
int main(int argc, char **argv)
{
STOriginator *pstOriginator = new STOriginator("xxx", 10);
cout << "原始状态: " << endl;
pstOriginator->Show();
STCareTaker *pstCareTaker = new STCareTaker();
pstCareTaker->AddMemento(pstOriginator->SaveState());
pstOriginator->SetVitality(50);
cout << "战斗后状态: " << endl;
pstOriginator->Show();
pstOriginator->RecoverState(pstCareTaker->GetMemento(0));
cout << "归档后状态: " << endl;
pstOriginator->Show();
return 0;
}
3.编译源码
$ g++ -o example example.cpp
4.运行及其结果
$ ./example
原始状态:
Name: xxx
Live: 10
战斗后状态:
Name: xxx
Live: 50
归档后状态:
Name: xxx
Live: 10
网友评论