C++设计模式之装饰者模式(八)

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

decorator pattern

简介

  装饰者模式(decorator pattern)是在不改变原来类的成员变量和成员函数,以及其使用的继承关系的情况下,动态的扩展一个对象的功能。也是通过构建个一个包装类,来装饰指定的类,从而实现新的功能。
装饰者模式UML图

  • Component: 定义一个抽象接口。
  • ConcreteComponent: 定义一个具体的接口,继承于Component抽象接口。
  • Decorator: 拥有一个抽象接口(Component)对象的实例,并实现一个和抽象接口一致的接口。
  • ConcreteDecoratorA/B: 为持有的实例,增加新的功能。

代码

// decorator_pattern.h
class Component {
public:
    virtual void Operation() = 0;
}; // Component

class ConcreteComponent: public Component{
public:
    void Operation() override;
}; // ConcreateComponent

class Decorator: public Component{
public:
    virtual ~Decorator() = default;
    void Operation() override;
    void setComponent(std::shared_ptr<Component>& component);

protected:
    std::shared_ptr<Component> component_;
}; // Decorator

class ConcreteDecoratorA: public Decorator{
public:
    ConcreteDecoratorA(std::string name);
    std::string get_name();

private:
    std::string name_;

}; // ConcreateDecorator

class ConcreteDecoratorB: public Decorator{
public:
    void add_behavior();

}; // ConcreateDecorator
// decorator_pattern.cpp
void ConcreteComponent::Operation() {
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}

void Decorator::Operation() {
    this->component_->Operation();
}

void Decorator::setComponent(std::shared_ptr<patterns::Component> &component) {
    this->component_ = component;
}

ConcreteDecoratorA::ConcreteDecoratorA(std::string name) {
    this->name_ = name;
}

std::string ConcreteDecoratorA::get_name() {
    return this->name_;
}

void ConcreteDecoratorB::add_behavior() {
    std::cout << __PRETTY_FUNCTION__ << std::endl;
}


int main(){
    std::shared_ptr<Component> component = std::make_shared<ConcreteComponent>();

    std::shared_ptr<ConcreteDecoratorA> decorator_a = std::make_shared<ConcreteDecoratorA>("aiden");
    decorator_a->setComponent(component);
    decorator_a->Operation();
    std::cout << decorator_a->get_name() << std::endl;

    std::cout << "--------------------------------------------------" << std::endl;

    std::shared_ptr<ConcreteDecoratorB> decorator = std::make_shared<ConcreteDecoratorB>();
    decorator->setComponent(component);
    decorator->Operation();
    decorator->add_behavior();
	return 0;
}

// output
// virtual void patterns::ConcreteComponent::Operation()
// aiden
// --------------------------------------------------
// virtual void patterns::ConcreteComponent::Operation()
// void patterns::ConcreteDecoratorB::add_behavior()
突破编程_C++_设计模式(装饰器模式) C++ 设计模式:装饰器模式 阅读详情

相关推荐

C++设计模式:装饰者模式

C++面试题

夏天的狂风的专栏 501

c++装饰者模式

设计模式--装饰者模式

405

23种设计模式-装饰器(Decorator)设计模式

软考中级-软件设计师 装饰器设计模式

片言可决讼,半纸能缚龙 1736

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

装饰者模式是一种设计模式,它允许我们动态地将行为附加到对象上,而无需改变对象本身的定义。它将一个对象的行为包装在一个独立的的对象中,这个对象既可以单独存在,也可以与其他对象组合在一起,从而灵活地改变类的行为。

性感的小君君 888

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

C++设计模式入门

程序员与背包客_CoderZ 1650

RK3576平台Buildroot嵌入式Linux镜像构建实战

嵌入式Linux镜像构建是连接硬件能力与软件功能的核心技术环节,其本质是基于目标SoC架构的交叉编译、内核定制与根文件系统集成过程。原理上依赖工具链适配、设备树绑定、分区镜像生成等关键步骤,技术价值在于实现轻量、确定、可复现的系统交付。典型应用场景涵盖ARM64开发板(如RK3576)、工业边缘网关及国产化信创终端。本文以TaishanPi-3为载体,深入解析Buildroot在RK3576平台上的配置裁剪、并行编译优化、genimage分区合成及update.img烧录准备,覆盖从环境选型(Ubuntu

weixin_36047538的博客 139

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

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

慢慢记录,慢慢更新。 2001

HITS算法详解及代码实现

占坑

蓁蓁尔的博客 7462

【C++设计模式】4.4-装饰者模式(Decorator)

C++ 23种设计模式之装饰者模式(Decorator)。

luonong9586的博客 470

PCIe 6.0实战指南:从链路训练到信号完整性的避坑手册

本文是一份针对PCIe 6.0硬件工程师的实战避坑指南。文章深入解析了从NRZ到PAM4调制带来的信号完整性挑战,详细拆解了链路训练(LTSSM)的复杂过程与调试方法,并提供了从信道仿真到实验室实测(如使用Keysight示波器进行眼图与误码率分析)的完整信号完整性闭环验证策略,帮助工程师解决高速率下的链路不稳定与降速问题。

weixin_29306875的博客 342

【科技前沿】用深度强化学习优化电网,让电力调度更聪明!

Hey小伙伴们,今天我要跟大家分享一个超级酷炫的技术应用——深度强化学习在电网优化中的典型案例!如果你对机器学习感兴趣,或是正寻找如何用AI技术解决实际问题的方法,这篇分享绝对不容错过!👩‍💻✨

Jacklx888的博客 3246

C++ 设计模式 八:装饰器模式 (读书 现代c++设计模式)

何时需要使用装饰器模式?装饰器模式的核心应用场景是动态地为对象添加功能,同时避免因继承导致类层次结构复杂化。运行时扩展对象功能:在不修改原有代码的情况下,动态地为一个对象叠加多个功能(如颜色、透明度、日志记录等)。避免类爆炸:当需要为对象提供多种功能的排列组合时,继承会导致大量子类(如),而装饰器模式通过组合灵活解决这一问题。遵循开闭原则:对扩展开放(允许新增装饰器),对修改关闭(不修改原有类)。装饰器模式解决的核心问题继承的局限性继承是静态的,功能扩展需要在编译时确定。

Duramentee的博客 1270

实战拆解:RAG vs Agent在金融风控中的性能对比

2024年上半年我帮某华东地区城商行做零售交易反欺诈系统升级时,技术团队曾发生过一次激烈争论:一派认为应该优先上RAG(检索增强生成)方案,成本低、落地快、合规性好;另一派坚持要上Agent(智能体)方案,推理能力强、能应对复杂新型欺诈。最终我们做了完整的AB测试,结论是两者没有绝对的优劣,只有场景适配的差异:RAG适合高并发、低时延的实时风控场景,Agent适合低并发、高准确率要求的事后核查/大额审批场景,两者结合的 hybrid 方案能覆盖95%以上的风控需求。本文我会结合真实项目的测试数据,从核心概念

AI天才研究院 251

C++设计模式[八]装饰模式

在GOF的《设计模式:可复用面向对象软件的基础》一书中对装饰模式是这样说的:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。装饰模式能够实现动态的为对象添加功能,是从一个对象外部来给对象添加功能。通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合的方式。显然,直接修改对应的类这种方式并不可取。在面向对象的

深藏功与名 1094

实用电路精讲系列---双级运放放大电路(差分放大+跟随缓冲)

本文分析了双极运放放大电路的工作原理及其典型应用。该电路结合差分放大器和跟随缓冲器,实现高精度信号放大与阻抗匹配。差分放大器通过放大差模信号并抑制共模噪声提升信噪比;跟随缓冲器则提供阻抗变换,确保信号稳定传输。两者协同工作可优化输入阻抗、增强噪声抑制并提高设计灵活性。文章还列举了10个典型应用案例,包括医疗设备、工业传感器和新能源系统等,展示了该电路在精密电子系统中的关键作用。最后通过实用电路分析,详细说明了各模块功能及设计注意事项。

weixin_40590799的博客 2954

ADRC自抗扰PD+ESO控制(博途SCL源代码)

文章浏览阅读119次。线性自抗扰控制(LADRC)系统算法框图-优快云博客文章浏览阅读335次。NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-优快云博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。ADRC自抗扰PD+ESO控制(CODESYS测试+完整ST代码)-优快云博客。

RXXW_Dor的博客 1317

设计模式 | 装饰器模式

组件(Component)定义对象的核心功能接口具体组件(Concrete Component)实现组件的核心功能装饰器(Decorator)持有组件引用实现组件接口具体装饰器(Concrete Decorator)添加额外功能动态扩展:运行时添加或移除功能灵活组合:任意组合功能装饰器单一职责:每个装饰器只关注一个功能开闭原则:扩展功能不修改现有代码避免继承爆炸:替代多层次继承结构使用时机需要在不影响其他对象的情况下动态添加职责不适合使用子类扩展的情况需要灵活组合多种功能需要透明地添加或移除功能。

@ 2249

企业级大数据平台的数据网格(Data Mesh)转型之路

随着企业数字化转型的深入,传统大数据平台面临数据孤岛化、治理成本高、业务响应慢等核心痛点。数据网格作为一种新兴的分布式数据管理架构,通过领域驱动设计(DDD)、数据产品化和联邦治理模式,为企业提供了打破数据壁垒、提升数据生产力的全新路径。本文聚焦企业级数据平台从传统架构(数据湖/数据仓库)向数据网格转型的关键技术、实施步骤和组织配套,涵盖技术架构设计、核心算法实现、项目实战案例及工具链推荐。背景介绍:定义转型目标、术语体系与核心挑战核心概念与联系:解析数据网格四大支柱及技术架构图谱核心算法原理。

AI 领航者的博客 1084

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

目录 基本概念 代码和实例 基本概念 装饰模式是为已有功能动态地添加更多功能的一种方式。 当系统需要新功能的时候,是向旧系统的类中添加新代码。这些新代码通常装饰了原有类的核心职责或主要行为。 装饰模式的优点: 1. 把类中的装饰功能从类中搬移出去,这样可以简化原有的类; 2. 有效地把类的核心职责和装饰功能区分开了。而且可...

IT1995的博客 5516

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【C++】装饰模式

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

AAADiao的博客 1809

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

qq_51340322的博客 1776

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【C++设计模式】第五篇:装饰器模式

【C++设计模式】【C++设计模式】【C++设计模式】【C++设计模式】第五篇:装饰器模式。

宁静致远的博客 908

简单易懂23种设计模式——装饰者模式【含C++代码实例】

在做面向对象的软件开发时我们往往想达到更高的代码可复用性和更合理的软件颗粒度。   根据《设计模式——可复用面向对象软件的基础》所说:“你必须找到相关的对象,以适当的颗粒度将他们回归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。”   内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以...

机器人梦想家 Bing Lee 2870

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++设计模式——装饰器模式

装饰器设计模式其本质上还是使用多态的原理,提供了一种可扩展功能的设计模式。

肩上风骋的博客 1582

基于C++的《Head First设计模式》笔记——装饰者模式

本文介绍了装饰者设计模式在星巴兹咖啡订单系统中的应用。文章首先分析了传统继承方式带来的类爆炸问题,随后引入开放-关闭原则,详细讲解了装饰者模式如何通过动态组合对象来灵活扩展功能。作者用C++实现了咖啡基类和调料装饰类,展示了如何通过层层装饰来构建复杂订单。代码示例演示了双倍摩卡豆奶加牛奶的订单实现过程,并分析了装饰链的调用流程。最后讨论了装饰者模式的优缺点,并扩展实现了按杯型定价的功能。该模式有效解决了类膨胀问题,使系统更易扩展和维护。

Yu_Lijing的博客 873
上一篇: C++设计模式之桥接模式(七)
下一篇: C++设计模式之组合模式(九)
一杯盐水
博客等级 码龄10年 62粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值