装饰器模式

装饰器模式简单来说就是通过一个装饰器,不断的去增强基类的现有功能,而不是去扩充子类。

举个例子:还是原来的汽车例子,有宝马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.