装饰器模式
装饰器模式简单来说就是通过一个装饰器,不断的去增强基类的现有功能,而不是去扩充子类。
举个例子:还是原来的汽车例子,有宝马BWM和奥迪Audi两个车
class Car
{
public:
virtual void show() = 0;
};
class BWM :public Car
{
public:
void show() {
cout << "this is BWM Car" << endl; }
};
class Audi :public Car
{
public:
void show() {
cout << "this is Audi Car" << endl; }
};
如果我们想给两种车上蓝牙,无疑我们能够通过增加子类的方式去添加蓝牙功能:
class BWMBlueTooth :public BWM
{
public:
void bluetooth() {
cout << "with bluetooth" << endl; }
};
但是这样每增加一个功能,不同的车型都需要增加一个子类,这样会造成整个项目之中存在大量的子类。
这个时候我们就需要装饰器了。
装饰器通过和产品继承自一个基类来达到不断对其修饰,针对一个自基类继承的方法,先是调用自身所指向的汽车对象,然后在后面写上所要增加的功能:
class LightDecorator :public Car
{
public:
LightDecorator(Car* p) :pCar_(p) {
}
void show()
{
pCar_->show();
cout << "with Light" << endl;
}
private:
Car* pCar_;
};
class BlueToothDecorator :public Car
{
public:
BlueToothDecorator(Car* p) :pCar_(p) {
}
void show()
{
pCar_->show();
cout << "with BlueTooth" << endl;
}
private:
Car* pCar_;
};
int main()
{
Car* p = new LightDecorator(new BWM());
p = new BlueToothDecorator(p);
p->show();
}
参考文献
[1] 施磊.C++高级.图论科技.2020.7.