保存存档——备忘录模式

备忘录模式

在这里插入图片描述

备忘录模式UML

备忘录模式是在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值