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.
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
06-11 13:34
offe从四面八方来:我真的没时间陪你闹了
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

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