装饰模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。
装饰模式动态的给一个对象添加一些额外的职责,就增加功能来说,该模式比生成子类更为灵活。
装饰模式就是把要添加的附加功能分别放到单独的类中,并让这个类包含它要装饰的对象。当我们需要执行时,客户端可以有选择的、按顺序的使用装饰功能
小妖怪,快看代码
#include<iostream>
#include<string>
using namespace std;
class Car86
{
public:
Car86() {}
virtual void show() = 0;
};
class RunCar86 :public Car86
{
public:
RunCar86() {}
void show()
{
cout<<"可以跑"<<endl;
}
};
class SupersonicCar86Director : public Car86
{
public:
SupersonicCar86Director (Car86* car)
{
m_car = car;
}
void show()
{
m_car->show();
cout<<"速度可达超音速"<<endl;
}
private:
Car86* m_car;
};
class FlyCar86Director :public Car86
{
public:
FlyCar86Director (Car86* car)
{
m_car = car;
}
void show()
{
m_car->show();
cout<<"甚至可以飞"<<endl;
}
private:
Car86* m_car;
};
int main()
{
//我有一辆可以跑的86
RunCar86* run86 = new RunCar86();
run86->show();
cout<<"--------------------"<<endl;
//后来装了超音速装置
SupersonicCar86Director* supersonic86 = new SupersonicCar86Director(run86);
supersonic86->show();
cout<<"--------------------"<<endl;
//之后又给我的86装了翅膀
FlyCar86Director* fly86 = new FlyCar86Director(supersonic86);
fly86->show();
delete run86;
delete supersonic86;
delete fly86;
return 0;
}
看到一个不错的,学习学习:https://blog.youkuaiyun.com/Mark_LQ/article/details/48413485