装饰器模式:动态的给一个对象添加一些额外的职责,而不是给整个类添加一些功能。
场景:
1.以动态透明的方式给单个对象添加职责;
2.不采用子类的方式进行扩充。
装饰器模式更加灵活的向对象添加职责,可以添加和分离方法,用装饰在运行时刻增加和删除职责。装饰对象的接口和它所装饰的对象的接口是一致的。装饰模式采用把功能分离到每个装饰器中,然后通过对象组合的方式,在运行时动态的组合功能,每个被装饰的对象最终有哪些功能,是由运行期动态组合的功能决定的
#include <stdio.h>
class Person {
public:
virtual void dress() = 0;
};
class Girl : public Person {
public:
virtual void dress() {
printf("女孩穿着普通,");
}
};
class Skirt : public Girl {
public:
Skirt(Person* p) {
_person = p;
}
virtual void dress() {
_person->dress();
printf("还穿了一件漂亮的T恤!\n");
}
private:
Person* _person;
};
class SummerCloth : public Girl {
public:
SummerCloth(Person* p) {
_person = p;
}
virtual void dress() {
_person->dress();
printf("还穿了一件漂亮的短袖!\n");
}
private:
Person* _person;
};
int main() {
Person* person = new Girl;
SummerCloth* summerCloth = new SummerCloth(person);
summerCloth->dress();
Skirt* skirt = new Skirt(person);
skirt->dress();
return 0;
}
运行结果: