在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
#include <iostream>
#include <vector>
using namespace std;
// 需要保存的信息
class Memento
{
public:
Memento(int hp, int at, int df) : m_Hp(hp), m_At(at), m_Df(df) {}
public:
int m_Hp;
int m_At;
int m_Df;
};
// 游戏角色
class GameRole
{
public:
GameRole() : m_Hp(100), m_At(100), m_Df(100) {}
Memento save()
{
Memento memento(m_Hp, m_At, m_Df);
return memento;
}
void load(Memento memento)
{
m_Hp = memento.m_Hp;
m_At = memento.m_At;
m_Df = memento.m_Df;
}
void show()
{
cout << "生命值: " << m_Hp << endl;
cout << "攻击力: " << m_At << endl;
cout << "防御值: " << m_Df << endl;
}
void attack()
{
cout << "受到攻击后: " << endl;
m_Hp -= 20;
}
private:
int m_Hp;
int m_At;
int m_Df;
};
// 保存的进度库
class CareTake
{
public:
CareTake() {}
void save(Memento memento)
{
m_vecMemento.push_back(memento);
}
Memento load(int state)
{
return m_vecMemento[state];
}
private:
vector<Memento> m_vecMemento;
};
void test_01()
{
CareTake caretake;
GameRole role;
role.show(); // 初始值
caretake.save(role.save()); // 保存状态
role.attack();
role.show(); // 进攻后
caretake.save(role.save()); // 保存状态
role.load(caretake.load(1)); // 载入状态
role.show(); // 恢复到状态0
}
int main()
{
test_01();
system("pause");
return 0;
}