备忘录模式
备忘录模式是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
#pragma once
#include <iostream>
#include <vector>
#include <string>
#include <Windows.h>
using namespace std;
//备份数据
class SaveDate
{
public:
SaveDate(int attack, int defense, int hp)
{
this->attack = attack;
this->defense = defense;
this->hp = hp;
}
int getAttack() const { return attack; }
int getDefense() const { return defense; }
int getHp() const { return hp; }
private:
int attack; //攻击力
int defense;//防御力
int hp; //生命力
};
//游戏角色数据
class Person
{
public:
Person():attack(0), defense(0), hp(0){}
SaveDate* createSaveDate()
{
return new SaveDate(attack, defense, hp);
}
void setSaveDate(const SaveDate* date)
{
attack = date->getAttack();
defense = date->getDefense();
hp = date->getHp();
}
void showPerson()
{
cout << "英雄攻击力" << attack << endl;
cout << "英雄防御力" << defense << endl;
cout << "英雄生命力" << hp << endl;
}
void deductVal(int attackVal, int defenseVal, int hpVal)
{
//增减人物数值
attack += attackVal;
defense += defenseVal;
hp += hpVal;
}
private:
int attack; //攻击力
int defense;//防御力
int hp; //生命力
};
//备忘录管理类
class SaveDateMgr
{
private:
SaveDate* save;
public:
SaveDate* restoreSaveDate()
{
return save;
}
void addSaveDate2Mgr(SaveDate* save)
{
this->save = save;
}
};
int main()
{
Person hero;
SaveDateMgr mgr;
//装备武器,提升三维
hero.deductVal(10, 5, 100);
hero.showPerson();
//保存存档
mgr.addSaveDate2Mgr(hero.createSaveDate());
//遇到怪兽进行战斗,掉80血
hero.deductVal(0, 0, -80);
hero.showPerson();
//恢复存档
hero.setSaveDate(mgr.restoreSaveDate());
hero.showPerson();
system("pause");
return 1;
}