装饰模式
装饰模式(Decorator),动态地给一个对象添加一些额外的职责,就增加功能来说,装饰者模型比生成子类更为灵活。
#include <iostream>
#include<string>
using namespace std;
//"Person"类(concretetcomponent)
class Person
{
public:
virtual void show(){}
};
//服饰类(Decorator)
class Finery :public Person
{
protected:
Person *component;
public:
void Decorate(Person *components)
{
component = components;
}
void show()
{
if(component!=NULL)
component->show();
}
};
//具体装饰类(ConcreteDecorator)
class TShirts :public Finery
{
public:
void show()
{
cout << "大T恤" << endl;
component->show();
}
};
class Trouser :public Finery
{
public:
void show()
{
cout << "裤子哦" << endl;
component->show();
}
};
class Skirt :public Finery
{
public:
void show()
{
cout << "裙子吗" << endl;
component->show();
}
};
int main()
{
Person* x = new Person();
cout << "第一种装扮:" << endl;
TShirts *t = new TShirts();
Trouser *T = new Trouser();
Skirt *S = new Skirt();
T->Decorate(x);
t->Decorate(T);
S->Decorate(t);
S->show();
delete[] x;
delete[] t;
delete[] T;
delete[] S;
return 0;
}