装饰模式:动态地给一个对象添加一些格外的职责,这个只是对某个对象添加,而不是对整个类。就添加功能来说,装饰模式比生成子类更为灵活。
实现思路:定义一个基类,然后定义装饰基类继承基类,然后每一个具体的装饰类都继承装饰基类,在需要装饰的对象上面添加功能。
代码如下:
#include<iostream>
#include<string>
using namespace std;
class person
{
private:
string name;
public:
person(){}
person(string tt){ name = tt; }
virtual~person(){}
virtual void showDecorate()
{
cout << "打扮: " << name << endl;
}
};
class DecoratePerson :public person
{
private:
person*m_person;
public:
DecoratePerson(person*p)
{
m_person = p;
}
void showDecorate()
{
m_person->showDecorate();
}
};
class Tshirts :public DecoratePerson
{
public:
Tshirts(person*p) :DecoratePerson(p)
{
}
void showDecorate()
{
DecoratePerson::showDecorate();
cout << "T恤 ";
}
};
class Shoes :public DecoratePerson
{
public:
Shoes(person*p) :DecoratePerson(p)
{
}
void showDecorate()
{
DecoratePerson::showDecorate();
cout << "鞋子 ";
}
};
class pants :public DecoratePerson
{
public:
pants(person*p) :DecoratePerson(p)
{
}
void showDecorate()
{
DecoratePerson::showDecorate();
cout << "裤子 ";
}
};
int main()
{
person*curPerson = new person("小明");
person* decA = new Tshirts(curPerson);
person*decB = new Shoes(decA);
person*decC = new pants(decB);
decC->showDecorate();
return 0;
}