c++装饰器模式

一,装饰器模式

一般情况下,用继承实现类的功能扩展
装饰器模式,可以动态给一个类增加功能

二,代码实现

#include <iostream>
#include <vector>
#include <queue>
#include<list>
#include <Windows.h>
using namespace std;
//抽象英雄
class AbstractHero
{
public:
	virtual void ShowStatus() = 0;
public:
	int m_Hp;
	int m_Mp;
	int m_At;
	int m_Df;
};
//具体英雄
class HeroA:public AbstractHero
{
public:
	HeroA()
	{
		m_At = 0;
		m_Df = 0;
		m_Hp = 0;
		m_Mp = 0;
	}
	virtual void ShowStatus()
	{
		cout<<"血量:"<< m_Hp << endl;
		cout<<"魔法:"<< m_Mp << endl;
		cout<<"攻击:"<< m_At << endl;
		cout<<"防御:"<< m_Df << endl;
	}
};

//英雄穿上某个装饰物,那么它是一个进阶的英雄
//装饰器基类
class AbstractEquipment:public AbstractHero
{
public:
	AbstractEquipment(AbstractHero* hero)
	{
		this->m_pHero =hero;
	}

	virtual void ShowStatus()
	{
	}
public:
	AbstractHero* m_pHero;
};

class clothesEquipment:public AbstractEquipment
{
public:
	clothesEquipment(AbstractHero* hero):AbstractEquipment(hero)
	{
	}
	void addclothes()
	{	
		cout<<"英雄穿上衣服之后.."<<endl;
		this->m_Hp = this->m_pHero->m_Hp;
		this->m_Mp = this->m_pHero->m_Mp;
		this->m_At = this->m_pHero->m_At;
		this->m_Df = this->m_pHero->m_Df + 30;
	}

	virtual void ShowStatus()
	{
		addclothes();
		cout<<"血量:"<< m_Hp << endl;
		cout<<"魔法:"<< m_Mp << endl;
		cout<<"攻击:"<< m_At << endl;
		cout<<"防御:"<< m_Df << endl;
	}
};

class weaponEquipment:public AbstractEquipment
{
public:
	weaponEquipment(AbstractHero* hero):AbstractEquipment(hero)
	{
	}
	void addweapon()
	{
		cout<<"英雄穿上武器之后.."<<endl;
		this->m_Hp = this->m_pHero->m_Hp;
		this->m_Mp = this->m_pHero->m_Mp;
		this->m_At = this->m_pHero->m_At + 80;
		this->m_Df = this->m_pHero->m_Df ;
	}
	virtual void ShowStatus()
	{
		addweapon();
		cout<<"血量:"<< m_Hp << endl;
		cout<<"魔法:"<< m_Mp << endl;
		cout<<"攻击:"<< m_At << endl;
		cout<<"防御:"<< m_Df << endl;
	}
};

int main()
{
	AbstractHero* hero = new HeroA;
	hero->ShowStatus();
	cout<<"--------------"<<endl;
	
	hero = new clothesEquipment(hero);
	hero->ShowStatus();
	cout<<"--------------"<<endl;

	hero = new weaponEquipment(hero);
	hero->ShowStatus();
	cout<<"--------------"<<endl;

	system("pause");
	return 0;
}

三,运行截图

运行截图

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值