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

}
相关推荐
Bona Sun43 分钟前
单片机手搓掌上游戏机(二十三)—esp32运行简单街机模拟器软硬件准备
c语言·c++·单片机
@小码农1 小时前
2025年北京海淀区中小学生信息学竞赛第二赛段C++真题
开发语言·数据结构·c++·算法
sulikey1 小时前
C++模板初阶详解:从函数模板到类模板的全面解析
开发语言·c++·模板·函数模板·类模板
0 0 01 小时前
CCF-CSP第39次认证第三题——HTTP 头信息(HPACK)【C++】
开发语言·c++·算法
汉克老师2 小时前
2023年海淀区中小学信息学竞赛复赛(小学组试题第二题 回文时间 (time))
c++·算法·北京海淀中小学信息竞赛·模拟法
还没想好取啥名3 小时前
C++11新特性(一)——原始字面量
开发语言·c++
天赐学c语言3 小时前
12.6 - K个一组翻转链表 && C 编译到执行的4个阶段
数据结构·c++·链表·c编译
爪哇部落算法小助手3 小时前
每日两题day65
数据结构·c++·算法
橘颂TA4 小时前
【剑斩OFFER】算法的暴力美学——颜色分类
数据结构·c++·算法·动态规划
fish_xk5 小时前
c++基础扩展
开发语言·c++