设计模式C++实现(11)——装饰模式

一分钟学会MATLAB-数据清洗(含完整代码) 数据清洗是数据分析过程中的一个重要步骤,目的是提高数据的质量,以便进行更有效的分析。% 删除超出阈值的行。% 用线性插值填充缺失值。% 删除包含缺失值的行。% 找到缺失值的位置。% 可视化数据,识别异常值。缺失值是数据清洗中常见的问题。通过以上步骤,你可以有效地清洗数据,使其准备好进行后续的分析和建模。 阅读详情

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

       装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个手机,允许你为手机添加特性,比如增加挂件、屏幕贴膜等。一种灵活的设计方式是,将手机嵌入到另一对象中,由这个对象完成特性的添加,我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。下面给出装饰模式的UML图。

        在这种设计中,手机的装饰功能被独立出来,可以单独发展,进而简化了具体手机类的设计。下面给出Phone类的实现:

  1. //公共抽象类  
  2. class Phone  
  3. {  
  4. public:  
  5.     Phone() {}  
  6.     virtual ~Phone() {}  
  7.     virtual void ShowDecorate() {}  
  8. };  

        具体的手机类的定义:

  1. //具体的手机类  
  2. class iPhone : public Phone  
  3. {  
  4. private:  
  5.     string m_name; //手机名称  
  6. public:  
  7.     iPhone(string name): m_name(name){}  
  8.     ~iPhone() {}  
  9.     void ShowDecorate() { cout<<m_name<<"的装饰"<<endl;}  
  10. };  
  11. //具体的手机类  
  12. class NokiaPhone : public Phone  
  13. {  
  14. private:  
  15.     string m_name;  
  16. public:  
  17.     NokiaPhone(string name): m_name(name){}  
  18.     ~NokiaPhone() {}  
  19.     void ShowDecorate() { cout<<m_name<<"的装饰"<<endl;}  
  20. };  

        装饰类的实现:

  1. //装饰类  
  2. class DecoratorPhone : public Phone  
  3. {  
  4. private:  
  5.     Phone *m_phone;  //要装饰的手机  
  6. public:  
  7.     DecoratorPhone(Phone *phone): m_phone(phone) {}  
  8.     virtual void ShowDecorate() { m_phone->ShowDecorate(); }  
  9. };  
  10. //具体的装饰类  
  11. class DecoratorPhoneA : public DecoratorPhone  
  12. {  
  13. public:  
  14.     DecoratorPhoneA(Phone *phone) : DecoratorPhone(phone) {}  
  15.     void ShowDecorate() { DecoratorPhone::ShowDecorate(); AddDecorate(); }  
  16. private:  
  17.     void AddDecorate() { cout<<"增加挂件"<<endl; } //增加的装饰  
  18. };  
  19. //具体的装饰类  
  20. class DecoratorPhoneB : public DecoratorPhone  
  21. {  
  22. public:  
  23.     DecoratorPhoneB(Phone *phone) : DecoratorPhone(phone) {}  
  24.     void ShowDecorate() { DecoratorPhone::ShowDecorate(); AddDecorate(); }  
  25. private:  
  26.     void AddDecorate() { cout<<"屏幕贴膜"<<endl; } //增加的装饰  
  27. };  

         客户使用方式:

  1. int main()  
  2. {  
  3.     Phone *iphone = new NokiaPhone("6300");  
  4.     Phone *dpa = new DecoratorPhoneA(iphone); //装饰,增加挂件  
  5.     Phone *dpb = new DecoratorPhoneB(dpa);    //装饰,屏幕贴膜  
  6.     dpb->ShowDecorate();  
  7.     delete dpa;  
  8.     delete dpb;  
  9.     delete iphone;  
  10.     return 0;  
  11. }  

       装饰模式提供了更加灵活的向对象添加职责的方式。可以用添加和分离的方法,用装饰在运行时刻增加和删除职责。装饰模式提供了一种“即用即付”的方
法来添加职责。它并不试图在一个复杂的可定制的类中支持所有可预见的特征,相反,你可以定义一个简单的类,并且用装饰类给它逐渐地添加功能。可以从简单的部件组合出复杂的功能。[DP]

       在本文的例子中,我们定义了两个具体的手机类,iPhone类和NokiaPhone类,通过单独的装饰类为它们添加特性,从而组合出复杂的功能。
转自:http://blog.youkuaiyun.com/wuzhekai1985/article/details/6672614

用 SAP-ABAP-1 把 ABAP 代码理解这件事交给 AI:从遗留代码到 ABAP Cloud 的开发加速器 SAP-ABAP-1是SAP推出的首个专用ABAP基础模型,专注于理解和解释ABAP代码,帮助开发者更快迁移和维护遗留系统。它强调ABAP Cloud合规编码实践,通过SAP AI Foundation提供访问,主要能力包括代码解释、业务语义理解和框架约束分析。相比通用模型,它能更好处理ABAP特有的版本差异、权限控制和扩展边界等问题。该模型可集成到多种开发环境中,支持文件化开发体验,并能与SAP Joule等工具协同工作,为ABAP团队提供智能辅助。 阅读详情

相关推荐

电机传动机构的转矩与惯量折算

参考《工业运动控制》

庐州牧 1万+

设计模式-装饰模式

装饰模式-Decorator Pattern 自己的理解:具体构件和抽象装饰类继承抽象构件类,具体装饰类继承抽象装饰类,抽象构件类中有一个统一的方法,装饰的作用是为具体构件的这个方法加入额外的一些功能。(装饰类可以接收一个抽象构件类型,返回也是一个抽象构件类型) ● 抽象构件:它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理

Jonee`s blog 374

单片机OTA升级:Bootloader如何多重校验保障APP完整性?

本文详细介绍了单片机OTA升级中Bootloader如何通过CRC校验、数字签名、版本比对和存储位置检查等多重校验机制保障APP完整性。CRC校验作为快速检测数据完整性的核心手段,结合其他安全措施有效防止设备变砖和安全漏洞,确保远程升级的可靠性。

l3m4n的博客 981

具身智能遇上嵌入式操作系统:实时性、异构算力与混合部署实战解析

嵌入式操作系统是机器人系统的底座,其核心价值在于提供确定性的实时调度能力。与传统通用OS追求平均吞吐不同,具身智能要求控制任务在微秒级时间窗口内稳定执行,这需要混合关键性架构将硬实时任务与AI推理隔离。开源的openEuler Embedded通过支持Linux与RTOS异构核部署、openAMP共享内存通信,并与ROS 2生态打通,为机器人开发者提供了一条兼顾生态与确定性的路径。从工业控制到具身智能,这种软硬协同的底座正在成为机器人规模化落地的关键变量。围绕openEuler Embedded具身智能技术

weixin_34296641的博客 499

基于Pascal VOC数据集的YOLOv8目标检测系统实现:人、鸟、猫、牛、电视、车等20类目标识别与UI界面部署全流程详解

VOC 2007、VOC 2012 两个主要版本;每个图像提供 bounding box(目标框)+ 目标类别;共计 20 类,所有图像手工标注,质量高。完整复现 Pascal VOC 20类检测任务成功训练 YOLOv8 模型实现可视化 UI + 实时检测系统支持多平台部署和演示。

YOLO 771

RK3588开发笔记-ISP模块参数调试

本文详细介绍了基于RK3588平台的ISP模块参数调试流程。主要内容包括:硬件准备(RK3588板卡、IMX415摄像头等)、软件环境搭建(Ubuntu系统、RKISP_Tuner工具)、IMX415摄像头基础使用验证、RKISP2.x Tuner工具的使用方法(新建/加载IQ参数文件、Sensor配置、Raw图采集)以及最终IQ文件的部署。文章重点强调了基础标定的重要性,建议开发者分场景调试并参考官方文档,通过合理配置ISP参数来优化图像质量。该调试流程适用于RK3588平台的图像采集类项目开发。

flypig has a dream! 834

24种设计模式的C++实现(万字长文,欢迎收藏)

原文链接 目录 为什么使用设计模式 性能提升 单例模式 享元模式 对象创建模式组 简单工厂模式 抽象工厂模式 建造者模式 接口隔离模式组 facade(外观)模式 代理者模式 适配器模式 中介者模式 组件协作模式 策略模式 观察者模式 单一职责模式组 装饰器模式 桥接模式 行动变化模式组 命令模式 访问者模式 状态变化模式组 状态模式 备忘录模式 解释器模式 数据结构模式组 迭代器模式 组合模式 责任链模式 为什么使用设计模式 抵御变化复

yang1fei2的博客 3833

RTCA DO-160G标准详解:航空电子设备的全面环境适应性测试指南

第二章的主要目的是提供标准中使用的术语和定义。了解这些术语对于准确理解标准的要求至关重要,特别是在技术实施过程中。RTCA DO-160G 涉及多个学科的知识,包括航空、电子、电磁学和机械工程,因此需要确保使用的术语在所有学科中具有一致的定义。为了确保测试人员和工程师在执行测试时对所有条件和要求的理解一致,RTCA DO-160G 标准中定义了大量术语。环境应力:指的是设备在操作过程中可能遇到的外部物理或化学条件,包括温度、湿度、振动等。电磁干扰(EMI)

qq_41854911的博客 5276

C++:C++11 和 设计模式

C++11简介"不如握紧拳头,这就是我的所有"前言:C++11简介(一)C++11特性与语法(1)列表初始化C++11对于 {} 初始化值赋予新的用法:①内置类型+结构体。

RNGWGzZs的博客 1304

在 SAP S/4HANA Cloud Public Edition 中掌控 ABAP 生命周期管理:One-Off、Multi-Off 与 Scalable Delivery 的落地方法论

本文系统梳理了SAP S/4HANA Cloud Public Edition中ABAP扩展开发的三种生命周期管理模式:One-Off适用于企业内部扩展,通过Import Collection在三系统间流转;Multi-Off面向少量客户交付,基于gCTS和Git实现不连接系统间的传输;Scalable Delivery则将扩展产品化为add-on,支持规模化分发。文章结合RAP、OData等实际开发场景,对比分析了各模式的特点与适用边界,为国内团队提供了符合Public Cloud要求的开发与交付实践建议

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1494

Python调用CANoe

我们可以创建CANoe应用程序对象,打开配置文件,启动模拟,发送和接收消息,并在完成后关闭CANoe应用程序。这使得我们能够使用Python自动化执行测试任务,并集成CANoe的功能到我们的Python应用程序中。CANoe是一款功能强大的汽车网络仿真和测试工具,它能够模拟和分析汽车网络通信,并提供丰富的测试功能。通过Python编程语言,我们可以方便地调用CANoe的API,实现自动化测试和集成CANoe的功能到我们的Python应用程序中。在CANoe中,我们可以为不同的汽车网络创建配置文件。

AzqLinux的博客 1286

[C++实现 设计模式(11)] : 装饰模式

文章目录情景描述装饰模式的定义装饰模式的应用装饰模式的优点装饰模式的缺点装饰模式的使用场景*参考书籍* : 情景描述        每当会想起考试卷签字这件事都会让我背脊发凉 , 然而在四年级的期末考试 , 学校出了一个损招 , 打印成绩单 , 要让家长签字 , 然后才能上五年级 . 当时那个恐惧 , 有那么一瞬间觉得念书就到此...

Nonpc的博客 2062

华为OD机考真题 新系统 - 小菊的寻宝之旅(Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【小菊的寻宝之旅】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【小菊的寻宝之旅】多语言题解。

qq_45776114的博客 616
上一篇: 设计模式C++实现(10)——桥接模式
下一篇: 设计模式C++实现(13)——中介者模式
tspangle
博客等级 码龄19年 81粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值