当前位置: 首页 > article >正文

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

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

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

什么是装饰器模式?

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

如何实现装饰器模式?

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


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();

}

http://www.kler.cn/news/353786.html

相关文章:

  • 2024年10款超好用的图纸加密软件推荐|企业图纸加密必备!
  • IntelliJ IDEA如何安装插件
  • 胤娲科技:AI短视频——创意无界,即梦启航
  • C++笔记之静态多态和动态多态
  • Java日常开发小结-01
  • 【C语言】占位符集合
  • PHP对Json数据格式的理解
  • 1002-补打卡-leetcode打卡,有序数组去除重复出现超过2次的元素
  • 《vue leaflet学习实践笔记》
  • openpose二维骨架搭建介绍及代码撰写详解(总结4)
  • Linux下内核空间和用户空间内存映射图详解
  • CesiumJS 案例 P3:清空默认图层、添加纯色图层、创建圆点、创建矩形
  • C++之默认拷贝函数
  • 护眼台灯哪个牌子最好?当心劣质护眼灯三大缺陷
  • [Git] Git下载及使用 从入门到精通 详解(附下载链接)
  • React组件传值方法
  • gbase8s的事务、并发控制、锁机制、隔离级别
  • MD5 在数据库中的应用与安全性分析
  • leetcode-301. 删除无效的括号
  • GaussDB 主备版本8 -schema及操作