一,装饰器模式
一般情况下,用继承实现类的功能扩展
装饰器模式,可以动态给一个类增加功能
二,代码实现
#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;
}
三,运行截图