[C++]备忘录模式

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

github源码路径:https://github.com/dangwei-90/Design-Mode

// 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

// 参考大话设计模式 - 备忘录模式

// 备忘录模式 : 保存一个对象的某个状态,以便在适当的时候恢复对象

#include <iostream>

#ifndef SAFE_DELETE
#define SAFE_DELETE(p) { if(p){delete(p); (p)=NULL;} }
#endif

using namespace std;

// 角色,拥有三个状态属性
class Player {
public:
	void SetCurrentState(int vitality, int attack, int defence) {
		vitality_ = vitality;
		attack_ = attack;
		defence_ = defence;
	}

public:
	int vitality_ = 0;
	int attack_ = 0;
	int defence_ = 0;
};

// 备忘录,用于记录某一阶段的状态
class Memento {
public:
	~Memento() {
		SAFE_DELETE(player_);
	}

	void GetPlayerState(Player* player) {
		player->vitality_ = player_->vitality_;
		player->attack_ = player_->attack_;
		player->defence_ = player_->defence_;
	}

	void SetPlayer(Player* player) {
		player_->vitality_ = player->vitality_;
		player_->attack_ = player->attack_;
		player_->defence_ = player->defence_;
	}

public:
	Player* player_ = new Player();
};

void print_player_state(Player* player) {
	printf("=====================\n");
	printf("vitality: %d \n", player->vitality_);
	printf("attack: %d \n", player->attack_);
	printf("defence: %d \n", player->defence_);
}

int main()
{
	// before pk boss
	Player* player = new Player();
	player->SetCurrentState(100, 100, 100);

	print_player_state(player);

	// memento
	Memento* memento = new Memento();
	memento->SetPlayer(player);
	print_player_state(player);

	// after pk boss
	player->SetCurrentState(0, 0, 0);
	print_player_state(player);

	// memento to player
	memento->GetPlayerState(player);
	print_player_state(player);

	SAFE_DELETE(memento);
	SAFE_DELETE(player);

	return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值