#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
//一般情况下 用继承实现类的功能
//抽象英雄
class AbstractHero
{
public:
virtual void ShowStatus() = 0;
int mHp;
int mMp;
int mAt;
int mDf;
};
//具体英雄
class HeroA : public AbstractHero
{
public:
HeroA()
{
mHp = 0;
mMp = 0;
mAt = 0;
mDf = 0;
}
virtual void ShowStatus()
{
cout << "血量:" << mHp << endl;
cout << "魔法:" << mMp << endl;
cout << "攻击:" << mAt << endl;
cout << "防御:" << mDf << endl;
}
};
//英雄穿上某个装饰物,那么他还是个英雄
class AbstractEquipment : public AbstractHero
{
public:
AbstractEquipment(AbstractHero* hero)
{
this->pHero = hero;
}
virtual void ShowStatus() {}
AbstractHero* pHero;
};
class KuangtuEquioment : public AbstractEquipment
{
public:
KuangtuEquioment(AbstractHero* hero) : AbstractEquipment(hero) {}
//额外增加功能
void AddKuangtu()
{
cout << "英雄穿上狂徒之后..." << endl;
this->mHp = this->pHero->mHp;
this->mMp = this->pHero->mMp;
this->mAt = this->pHero->mAt;
this->mDf = this->pHero->mDf + 30;
delete this->pHero;
}
virtual void ShowStatus()
{
AddKuangtu();
cout << "血量:" << mHp << endl;
cout << "魔法:" << mMp << endl;
cout << "攻击:" << mAt << endl;
cout << "防御:" << mDf << endl;
}
};
class WujinzhiKnife : public AbstractEquipment
{
public:
WujinzhiKnife(AbstractHero* hero) : AbstractEquipment(hero) {}
//额外增加功能
void AddWujinzhiKnife()
{
cout << "英雄装备无尽之刃之后..." << endl;
this->mHp = this->pHero->mHp;
this->mMp = this->pHero->mMp;
this->mAt = this->pHero->mAt + 80;
this->mDf = this->pHero->mDf;
delete this->pHero;
}
virtual void ShowStatus()
{
AddWujinzhiKnife();
cout << "血量:" << mHp << endl;
cout << "魔法:" << mMp << endl;
cout << "攻击:" << mAt << endl;
cout << "防御:" << mDf << endl;
}
};
void test01()
{
AbstractHero* hero = new HeroA;
hero->ShowStatus();
cout << "---------------------" << endl;
//给裸奔的英雄穿上狂徒
hero = new KuangtuEquioment(hero);
hero->ShowStatus();
cout << "---------------------" << endl;
//给英雄装备武器
hero = new WujinzhiKnife(hero);
hero->ShowStatus();
}
int main()
{
test01();
return 0;
}
装饰器模式案例
最新推荐文章于 2024-08-29 23:19:40 发布