装饰模式把每个要装饰的功能放在单独的类中,并在这个类中包含他要装饰的对象,当需要执行特殊行为时,客户端代码就可以根据需要有选择,有顺序的使用装饰功能包装对象了,他的好处就是有效的把类的核心功能和装饰功能区分开了,而且可以去除相关类中重复的装饰逻辑。但是需要注意装饰顺序。
#include <iostream.h>
#include <string.h>
class Person
{
private:
char name[30];
public:
Person()
{
}
Person(char *n)
{
strcpy(name,n);
}
virtual void show()
{
cout<<name<<"的打扮";
}
};
class Finery:public Person
{
private:
Person *m_person;
public:
void SetPerson(Person *p)
{
m_person=p;
}
virtual void show()
{
m_person->show();
}
};
class TShirts:public Finery
{
public:
virtual void show()
{
cout<<"大T恤 ";
Finery::show();
}
};
class BigTrouser:public Finery
{
public:
virtual void show()
{
cout<<"垮裤 ";
Finery::show();
}
};
class Sneakers:public Finery
{
public:
virtual void show()
{
cout<<"破球鞋 ";
Finery::show();
}
};
class suit:public Finery
{
public:
virtual void show()
{
cout<<"西装 ";
Finery::show();
}
};
class Tie:public Finery
{
public:
virtual void show()
{
cout<<"领带 ";
Finery::show();
}
};
class LeatherShoes:public Finery
{
public:
virtual void show()
{
cout<<"皮鞋 ";
Finery::show();
}
};
void main()
{
Person *pr=new Person("张三");
TShirts *ts=new TShirts;
BigTrouser *bt=new BigTrouser;
Sneakers *sk=new Sneakers;
ts->SetPerson(pr);
bt->SetPerson(ts);
sk->SetPerson(bt);
sk->show();
cout<<endl;
delete sk;
delete bt;
delete ts;
delete pr;
}