装饰模式
动态的给一个对象添加一些额外的职责,就增加功能来说,比生成子类更灵活。
装饰模式结构图
代码实现
//基类
class Person
{
private:
string m_strName;
public:
Person() {}
Person(string name)
{
m_strName = name;
}
virtual void show()
{
cout << "装扮的人是" << m_strName << endl;
}
};
//装饰类,包含decorate
class Finery :
public Person
{
private:
Person* m_person;
public:
Finery() {}
Finery(Person* person)
{
m_person = person;
}
virtual void show()
{
m_person->show();
}
};
//装饰子类1
class Tshirt :
public Finery
{
private:
Person* m_person;
public:
Tshirt(Person* person)
{
m_person = person;
}
void show()
{
cout << "穿Tshirt";
m_person->show();
}
};
//装饰子类2
class BigTrouse :
public Finery
{
private:
Person* m_person;
public:
BigTrouse(Person* person)
{
m_person = person;
}
void show()
{
cout << "穿大裤子";
m_person->show();
}
};
//客户端
void main()
{
Person* person = new Person("xiaoming");
Finery* finery = new Finery(person);
Tshirt* tshirt = new Tshirt(finery);
BigTrouse* bigTrouse = new BigTrouse(tshirt);
bigTrouse->show();
return;
}