c++之装饰模式

设计模式C++实现(11)——装饰模式 软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大 阅读详情

装饰模式属于结构型模式,所谓装饰,即修饰的意思。

定义:动态的给一个对象添加一些额外的职责

优点:对于增加功能而言,装饰模式比生产子类更加灵活。

何时使用:

在不改变原来的类和关系的情况下,动态地扩展这个类对象所具有的功能,当然也支持撤销添加的功能。

优点:

装饰模式与继承的目的都是扩展对象的功能,但是装饰模式却可以提供比继承更多灵活性。

通过使用不同的具体装饰类以及这些装饰类的排列组合,我们可以创造出很多不同表现的组合。

缺点:

比起继承而言,代码更复杂了。因为出现了很多装饰类,导致代码变得臃肿。

UML类图:

应用场景:

我们使用一些形容词来修饰鼠标和键盘。

代码(c++):

#include <iostream>
#include <vector>
#include <iostream>

using namespace std;

class Component {
public:
	virtual ~Component() {}
	virtual void decorate() = 0;
};

class ConcreteComponent :public Component
{
public:
	void decorate()
	{
		cout << "酷炫的 ";
	}
};

class Decorator :public Component
{
public:
	Decorator() :m_component(nullptr) {}

	void setComponent(Component *c)
	{
		m_component = c;
	}

	void decorate()
	{
		if (m_component)
			m_component->decorate();
	}
protected:
	Component* m_component;
};

class ConcreteDecoratorA :public Decorator
{
public:
	void run() {
		decorate();	//装饰机械键盘
		cout << "机械键盘" << endl;
	}
};

class ConcreteDecoratorB :public Decorator
{
public:
	void run() {
		decorate();	//装饰鼠标
		cout << "鼠标" << endl;
	}
};

//客户端
int main()
{
	ConcreteComponent* pC = new ConcreteComponent;
	ConcreteDecoratorA* pA = new ConcreteDecoratorA;
	ConcreteDecoratorB* pB = new ConcreteDecoratorB;

	pA->setComponent(pC);	//使用pC来装饰pA
	pA->run();
	pB->setComponent(pC);	//使用pC来装饰pB
	pB->run();

	if (pC) delete pC;
	if (pA) delete pA;
	if (pB) delete pB;

	getchar();
	return 0;
}

输出:

c++实现装饰模式完整源代码 阅读详情

相关推荐

微信小程序-如何根据缩放屏幕大小自适应icon图标更改marker

微信小程序如何根据用户的缩放屏幕来改变marker图标icon的大小,实现icon自适应屏幕缩放的效果

Bartender_VA11的博客 3980

C++设计模式04-——装饰设计模式

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。——— 百度百科主体(被装饰者)饰品(装饰)比如:定做的奶油蛋糕,蛋糕是主体,而蛋糕的外包装、丝带、花朵都是饰品。在某些情况下我们可能会"过度地使用继承来扩展对象的功能",由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性;并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。...

qq_51340322的博客 1776

EtherCAT应用层协议选型指南:CoE、SoE、EoE、FoE、AoE到底怎么选?看完这篇就懂了

本文深入解析EtherCAT应用层协议(CoE、SoE、EoE、FoE、AoE)的选型策略,从实时性、数据吞吐量和功能完整性三大核心指标出发,提供工业场景下的实战决策框架。通过技术特性对比、混合协议架构设计和常见故障规避指南,帮助工程师优化自动化设备通信性能。

weixin_28718793的博客 489

C++设计模式(13)——装饰模式

C++ 装饰器模式

伍粟的博客 2307

头歌操作系统 课后作业4.3:段页式内存管理 答案 无解析

头歌操作系统 课后作业4.3:段页式内存管理 答案 无解析

kercii的博客 7343

AI驱动视频剪辑自动化:cutcli命令行工具重塑工作流

视频剪辑自动化是提升内容生产效率的关键技术,其核心原理在于通过程序化指令替代手动操作,将创意执行过程代码化。这项技术的价值在于能够将创作者从重复性劳动中解放,实现批量化、标准化的视频内容生产,尤其适用于社交媒体运营、产品宣传等高频产出场景。通过封装专业软件(如剪映/CapCut)的底层草稿格式,自动化工具在保证工业级渲染质量的同时,提供了可编辑的中间态,为AI智能体(Agent)与生产工具的结合提供了清晰接口。本文以cutcli为例,深入探讨了如何通过命令行工具和AI助手,构建从自然语言指令到可编辑视频草稿

weixin_27210125的博客 1057

【C++设计模式】详解装饰模式

装饰模式是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。

m0_61629312的博客 1400

高通CamX架构解析(一)——核心组件与数据流设计

本文深入解析高通CamX相机架构的核心组件与数据流设计。CamX采用模块化与数据驱动思想,将复杂处理流程拆解为Node、Pipeline、Session等独立组件,并通过CHI层实现硬件接口与定制功能的分离。文章详细阐述了从请求下发到结果返回的完整数据流,并提供了实用的调试与分析指南,帮助开发者理解这一高效、灵活的现代相机架构。

k8l9m0n的博客 235

设计模式之装饰者模式

装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。我们通过下面的实例来演示装饰器模式的用法。其中,我们将把一个形状装饰上不同的颜色,同时又不改变形状类。使用场景: 1、扩展一个类的功能。 2...

sweet_sauce的博客 553

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.youkuaiyun.com/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

Zookeeper+Hadoop+Spark+Flink+Kafka+Hbase+Hive 完全分布式高可用集群搭建(保姆级超详细含图文) 附安装包网盘下载

Hadoop+Spark+Flink+Zookeeper+Kafka+Hbase+Hive完全分布式高可用集群搭建 Hadoop高可用集群搭建 Spark高可用集群搭建 Flink高可用集群搭建 Zookeeper高可用集群搭建 Kafka高可用集群搭建 Hbase高可用集群搭建 Hive高可用集群搭建 mysql搭建 jdk部署 大数据集群环境搭建

Mr.L-OAM的博客 2万+

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

装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象结构的情况下,动态地为对象添加额外的功能。下面是一个基于控件的例子,展示了如何使用装饰模式来增强控件的功能。

慢慢记录,慢慢更新。 2001

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【C++】装饰模式

装饰模式(Decorator Pattern)是一种【结构型】设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过创建一个装饰器类,来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。装饰模式在不使用继承的情况下,实现了对象功能的动态扩展。

AAADiao的博客 1808

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C++ 【装饰模式】

这里居然详细讲述了装饰器模式欸 !

Absorbed__的博客 1117

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[C++]装饰模式

装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 C++代码如下: // 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // // 参考大话设计模式 #include <iostream> using namespace std; class Person { public...

就是那个党伟 331

C++ 装饰模式

基类Iobject 继承Iobject,生成实物类 ObjectA 继承Iobject,生成装饰类 DecoratedObject 思考: C++代理模式,也是继承基类+持有基类,只不过代理模式里,例如代理服务器的,其作用不是和装饰类一样,增强某种功能,而是让用户单纯以为是直接对接的服务器,感觉不到代理类的存在,增加了一些本地功能,假装和服务器交流,实际上并没有...

智能网联汽车V2X开发网的博客 160

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

前言 在实际开发时,你有没有碰到过这种问题;开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作;而有一些非核心的操作,可能会使用,也可能不会使用;现在该怎么办呢? 将这些非核心的操作全部放到类中,这样,一个类就包含了很多核心的操作和一些看似有关,但是又无关的操作;这就会使核心类发生“爆炸”的现象,从而使核心类失去了一定的价值,也使使用核心类的客户在核心操作和非核心操作中挣扎; 使用继承来扩展核心类,需要使用核心类时,直接建立核心类对象;当需要使用核心类扩展类时,就建立核

嵌入式与人工智能 671

设计模式C++实现4:装饰模式

设计模式C++实现4:装饰模式

2568

C++ 设计模式之装饰模式

C++ 设计模式之装饰模式 目录 C++ 设计模式之装饰模式 设计目的 UML设计 代码实现 设计目的 动态地给一个对象添加一些额外的功能。 就增加功能来说,继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀,反之装饰模式可以在不想增加很多子类的情况下扩展类。 UML设计 以绘制彩色形状为例: 代码实现 //.h文件 #ifndef SHAPE_H #define SHAPE_H #include <QObject> class Shape : .

m_wordPlan的博客 357

《CPP设计模式》06 装饰模式

装饰模式 利用C++ RTTI(运行时识别)的特性,重构代码,发现统一性,减少代码冗余。 案例如下: 对于各类文件,如file, network, memory等均包括读,写,和查找等三个操作; 对于该类文件,处理时主要有以下m种操作,如:加密,缓存,以及加密及缓存等。 原始思路一: 定义基类Stream,衍生三个子类FileStream, MemoryStream, NetworkStream. 定义m种操作,如加密EntropyProcess, 缓存BufferProcess,加密及缓存Ent

Nancy_fairy的博客 263

c++实现装饰模式(附带源码)

装饰模式通过将功能分层次地添加到对象中,提供了极大的灵活性。它可以有效地避免过度使用继承,通过组合的方式来增强功能,是一个非常有用的设计模式,尤其适用于那些需要扩展现有功能但不希望改变原有类代码的场景。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 657

装饰模式C++实现

装饰模式(Decorator),动态的给一个对象添加一些额外的职责,先看图 Component是定义一个对象接口,可以给这些对象动态的添加职责。 ConcreteComponent是定义了一个具体的对象,也可以给这个对象添加一些职责。 Decorator装饰类,继承了Component,从外类来扩展Component类的功能,但对于Component来说,是无需知道Dec

Huangrg的专栏 593

C++设计模式——装饰模式(Decorator Pattern)

C++设计模式——装饰模式(Decorator Pattern) 微信公众号:幼儿园的学霸 目录 文章目录C++设计模式——装饰模式(Decorator Pattern)目录定义代码示例总结装饰模式和代理模式适用场景优缺点装饰模式的简化参考资料 定义 Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternati

leonardohaig的博客 1180

装饰模式C++详解

装饰模式的作用 装饰模式C++代码实现 代码实现 装饰模式的缺点 # 装饰模式 1. 装饰模式的作用 动态的给一个对象添一些额外的职责,就增加功能而言,装饰模式比生成子类更加的灵活。 为已有的功能动态的添加更多功能的一种方式 可以将勒种的核心职责和装饰从勒种移除,有效把职责和装饰分离 2. 装饰模式C++代码实现 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nBme9NTF-1645595496479)(./装饰模式.png)] 3....

ahelloyou的博客 1103

C++设计模式之装饰模式

C++设计模式之装饰模式什么是装饰模式首先定义个Phone的基类可以生成一个子类IPhone为Phone生成DecoratorPhone类, *将手机嵌入到另一个对象中,由这个对象完成特性的添加,我们称这个嵌入的对象为装饰。*具体的装饰类DecoratorPhoneA,*这个装饰和它所装饰的组件接口一致,因此它对使用该组件的客户透明。*主函数输出 什么是装饰模式 **装饰模式:**动态的给一个对象...

shu_chang1993的博客 178
上一篇: c++之建造者模式
下一篇: 使用SecureCRT连接Ubuntu
Qt上位机开发
Qt上位机开发 领域专家: C/C++技术领域 领域专家: C/C++技术领域
博客等级 码龄9年 9664粉丝 178原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值