C++设计模式——装饰器模式

装饰器模式

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

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

相关推荐

rbjjj:太杂了吧,同学,项目似乎都没深度,都是api调度耶,分层架构思想没有体现出来了,前端没有前端优化前端工程化体现,后端微服务以及分层架构没体现以及数据安全也没体现,核心再改改,注重于计算机网络,工程化,底层原理吧
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务