参考《大话设计模式》的装饰模式,把C#改写成c++的实现
装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能,就是一点一点添加。
Person类
class Person
{
public:
Person(){}
Person(string name):m_name(name){}
virtual void show()
{
cout<<m_name<<"的装扮"<<endl;
}
private:
string m_name;
};
服饰类
class Finery:public Person
{
protected:
Person* m_component;
public:
void Decorator(Person* component)
{
m_component = component;
}
void show() override
{
m_component->show();
}
};
具体服饰类
class TShirts:public Finery
{
public:
void show() override
{
cout<<"大T恤"<<endl;
this->m_component->show();
}
};
class BigTrouser:public Finery
{
public:
void show() override
{
cout<<"大裤衩"<<endl;
this->m_component->show();
}
};
...
测试
int main()
{
Person* xc = new Person("小菜");
Finery* dtx = new TShirts();
Finery* dkc = new BigTrouser();
dtx->Decorator(xc);
dkc->Decorator(dtx);
dkc->show();
delete xc;
delete dtx;
delete dkc;
return 0;
}
运行结果图: