//C++设计模式之备忘录模式
/*备忘录模式,在不破坏封装的前提下,捕获一个内部状态,在该对象之外保存这个
状态,*/
#include<iostream>
using namespace std;
class State
{
int vit;
int atk;
int def;
public:
State(int v, int a, int d) :vit(v), atk(a), def(d) {};
int getvit() { return vit; }
int getatk() { return atk; }
int getdef() { return def; }
};
class StateManger
{
State* m_state;
public:
void setstate(State* sta)
{
m_state = sta;
}
State* getstate()
{
return m_state;
}
};
class GameRole
{
int vit;
int atk;
int def;
public:
void stateDisplay()
{
cout << "当前角色状态:" << endl;
cout << "体力:" << vit << endl;
cout << "攻击力:" << atk << endl;
cout << "防御力:" << def << endl;
}
void Initstate()
{
vit = 100;
atk = 100;
def = 100;
}
State* savestate()
{
return (new State(vit, atk, def));
}
void recoverystate(State* memnto)
{
vit = memnto->getvit();
atk = memnto->getatk();
def = memnto->getdef();
}
void fight()
{
vit = 0;
atk = 0;
def = 0;
}
};
int main()
{
GameRole* xiaoyuan = new GameRole();
xiaoyuan->Initstate();
xiaoyuan->stateDisplay();
StateManger* Manger = new StateManger();
Manger->setstate(xiaoyuan->savestate());
cout << endl;
xiaoyuan->fight();
xiaoyuan->stateDisplay();
cout << endl;
xiaoyuan->recoverystate(Manger->getstate());
xiaoyuan->stateDisplay();
system("pause");
return 0;
}
使用该种设计模式的关键在于对象之外存储状态,获得当前对象的内部数据,然后可以调用对象之外的状态的恢复函数,然后就没有其他的了。