装饰:通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。
装饰者模式:把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。
装饰者模式(Decorator Pattern)动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。
class Car {
public:
virtual void description() = 0;
};
class RunCar :public Car {
public:
void run() {
cout << "RunCar runMethod------------" << endl;
}
void description() {
run();
}
};
class FlyCar :public Car {
public:
FlyCar(Car* car) {
m_car = car;
}
void flay() {
cout << "FlayCar fly Method-------------" << endl;
}
void description() {
m_car->description();
flay();
}
private:
Car* m_car;
};
class SwimCar : public Car {
public:
SwimCar(Car* car) {
m_car = car;
}
void swim() {
cout << "SwimCar swim Method---------" << endl;
}
void description() {
m_car->description();
swim();
}
private:
Car* m_car;
};
int main() {
RunCar* rcar = new RunCar;
rcar->description();
cout << "FlyCar description------------" << endl;
FlyCar* fcar = new FlyCar(rcar);
fcar->description();
cout << "SwimCar description------------" << endl;
SwimCar* scar = new SwimCar(rcar);
scar->description();
system("pause");
return 0;
}