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


欢迎来到 破晓的历程的 博客

⛺️不负时光,不负己✈️


什么是装饰器模式?

装饰器模式(Decorator Pattern)是一种结构型设计模式,允许你向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过创建一个装饰类,将对象放入装饰类中,然后动态地扩展对象的行为。

如何实现装饰器模式?

假设有这样一个需求:

有BMW,Benz,Audi三种不同的品牌,这些车都具备定速巡航,自定刹车,车道偏离功能。但虽然这些车属于不同的品牌,但是这些功能实现起来确很相似,但是如果我们分别添加不同的功能,就需要实现9个子类,所以我们可以利用装饰器模式来实现这个需求。

代码如下:

cpp 复制代码
class Car
{
public:
	virtual void show() = 0;
};
class Audi:public Car
{
public:
	void show()
	{
		cout << "这是一辆奥迪,配置:基本配置";
	}
};
class Benz:public Car
{
public:
	void show()
	{
		cout << "这是一辆奔驰,配置:基本配置";
	}
};
class BMW:public Car
{
public:
	void show()
	{
		cout << "这是一辆奥迪,配置:基本配置";
	}
};
//以下几个类都是属于装饰器
class ConcreteDecorator1:public Car
{
public:
	ConcreteDecorator1(Car *p)
		:_p(p)
	{}
	void show()
	{
		_p->show();
		cout << ",定速巡航" << endl;
	}
private:
	Car* _p;
};
class ConcreteDecorator2:public Car
{
public:
	ConcreteDecorator2(Car *p)
		:_p(p)
	{}
	void show()
	{
		_p->show();
		cout << ",车道偏离" << endl;
	}
private:
	Car* _p;
};
class ConcreteDecorator3:public Car
{
public:
	ConcreteDecorator3(Car *p)
		:_p(p)
	{}
	void show()
	{
		_p->show();
		cout << ",自动刹车" << endl;
	}
private:
	Car* _p;
};
int main()
{
	Car* B1 = new ConcreteDecorator1(new Benz());
	B1->show();
	Car* B2 = new ConcreteDecorator2(new Benz());
	B2->show();
	Car* B3 = new ConcreteDecorator3(new Benz());
	B3->show();

}
相关推荐
workflower24 分钟前
医院核心竞争力的四大重构
人工智能·安全·设计模式·重构·动态规划·scrum
王老师青少年编程1 小时前
信奥赛C++提高组csp-s之搜索进阶(迭代加深IDDFS)
c++·csp·信奥赛·csp-s·提高组·iddfs·埃及分数
liulilittle1 小时前
我从 BBRv1 到 KCC 的思考
网络·c++·tcp/ip·计算机网络·tcp·bbr·通信
落羽的落羽1 小时前
【项目】JsonRpc框架——开发实现1(细节功能、字段定义、抽象层、具象层)
linux·服务器·网络·c++·人工智能·算法·机器学习
handler012 小时前
【算法】并查集(普通/扩展/带权)模板与例题
数据结构·c++·笔记·算法·c·图论·查并集
繁星蓝雨2 小时前
C++中对比pragma once和ifndef的使用区别
开发语言·c++·ifndef·头文件·pragma once
.千余2 小时前
【C++】C++手写Vector容器:从底层源码模拟实现
开发语言·c++·经验分享·笔记·学习
a诠释淡然2 小时前
C++ vs Rust:哪个更适合你的下一个项目?
开发语言·c++·rust
小小de风呀2 小时前
de风——【从零开始学C++】(十二):stack和queue的基本使用和模拟实现
开发语言·c++
汉克老师3 小时前
GESP6级C++考试语法知识(五十三、动态规划----背包问题(六、分组背包)
c++·动态规划·背包问题·gesp6级·gesp六级·分组背