装饰模式C++详解

C++结构型模式-装饰模式 C++实现装饰器模式 阅读详情
  1. 装饰模式的作用
  2. 装饰模式C++代码实现
  3. 代码实现
  4. 装饰模式的缺点

装饰模式

1. 装饰模式的作用

动态的给一个对象添一些额外的职责,就增加功能而言,装饰模式比生成子类更加的灵活。

为已有的功能动态的添加更多功能的一种方式
可以将勒种的核心职责和装饰从勒种移除,有效把职责和装饰分离

2. 装饰模式C++代码实现

3. 代码实现

Compont.h

#ifndef COMPONET_H_
#define COMPONET_H_

#include <iostream>
using namespace std;

class Componet {
 public:
  Componet() {}
  ~Componet() {}

  virtual void Show(){}

 private:
};

#endif

Person.h实际的需要装饰的对象

#ifndef PERSON_H_
#define PERSON_H_

#include "Componet.h"

class Person : public Componet {
 public:
  Person() {}
  ~Person() {}

  void Show() { cout << "有一个人" << endl; }

 private:
};

#endif

Decorate.h 抽象装饰类

#ifndef DECORATE_H_
#define DECORATE_H_

#include "Componet.h"

class Decorate : public Componet {
 public:
  Decorate() {}
  ~Decorate() {}
  void Show() { componet_->Show(); }
  void decorate(Componet* c) { componet_ = c; }

 protected:
  Componet* componet_;

 private:
};

#endif

接下来是具体的装饰对象
Shirt.h

#ifndef SHIRT_H_
#define SHIRT_H_

#include "Decorate.h"

class Shirt : public Decorate {
 public:
  void Show() {
    componet_->Show();
    AddBehavior();
  }

 private:
  void AddBehavior() { cout << "穿了一件衬衫" << endl; }

 private:
};

#endif

Hat.h

#ifndef HAT_H_
#define HAT_H_

#include "Decorate.h"

class Hat : public Decorate {
 public:
  void Show() {
    componet_->Show();
    AddBehavior();
  }

 private:
  void AddBehavior() { cout << "带上帽子" << endl; }
};

#endif

Pants.h

#ifndef PANTS_H_
#define PANTS_H_
#include "Decorate.h"

class Pants : public Decorate {
 public:
  void Show() {
    componet_->Show();
    AddBehavior();
  }

 private:
  void AddBehavior() { cout << "穿上裤子" << endl; }
};

#endif

这就是一个递归调用的过程,跟俄罗斯套娃似得,利用虚函数的动态多态的机制,让componet_指向不同的实际Decorate

main.cc

#include "Componet.h"
#include "Hat.h"
#include "Pants.h"
#include "Person.h"
#include "Shirt.h"

int main() {
  Componet* man = new Person();
  Shirt* shirt = new Shirt();
  Pants* pants = new Pants();
  Hat* hat = new Hat();

  hat->decorate(man);
  shirt->decorate(hat);
  pants->decorate(shirt);

  pants->Show();
}

输出的结果

有一个人
带上帽子
穿了一件衬衫
穿上裤子

4. 装饰模式的缺点

  • 会出现许多的装饰逻辑类,使代码变得复杂
【C++设计模式】Decorator 装饰模式详解 装饰模式概述 、装饰模式结构与实现 、装饰模式的应用实例 、装饰模式的适用场景 、装饰模式的优缺点 阅读详情

相关推荐

C++装饰模式详解--设计模式(8)

Decorator装饰模式产生原因:                在OO设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本模式的讨论中给出)。通过继承的方式解决这样的情况还带来了系统的复杂性,因为继承的深度会变得很深。Decorator装饰模式作用:        Decorato...

程序猿老樊的博客 1172

C++设计模式:单一职责划分—修饰模式

在写一个面向对象的程序时,如果程序要扩展功能,使用继承的方法,会导致代码量急剧膨胀。 例如:下面的例子就是写一个文件分割器,基类是stream类,而流可能是文件、网络、内存的流,然后在文件、网络、内存的流中,对于基类中的三个纯虚函数进行重写。每扩展一个功能,就要写针对FileStream,NetworkStream,MemoryStream这三个主体类中的所有功能函数进行编写。 class stream { public: virtual char Read(int number)= 0; virtua

weixin_42111061的博客 255

C++ 装饰模式

装饰模式又叫包装模式,通过一种对客户端透明的方式来扩展对象功能,是继承关系的一种替代。装饰模式就是把要附加的功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择的、按顺序的使用装饰功能包装对象。 装饰模式中的角色和职责 Component(抽象构件):它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法,它的引入可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作。 ConcreteComponent(具体

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 914

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

C++ 装饰器模式

伍粟的博客 2308

c++装饰模式

概念 装饰( Decorator )模式又叫做包装模式。通过一种对客户端透明的方式来扩展对象的功能,是继承关系的一个替换方案。 装饰模式就是把要添加的附加功能分别放在单独的类中,并让这个类包含它要装饰的对象,当需要执行时,客户端就可以有选择地、按顺序地使用装饰功能包装对象。 类图角色和职责 ** 适用于: 装饰者模式(Decorator Pattern)动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。 案例 #include using namespace std; cla

希望我的博客,能帮上你解决学习中工作中所遇到的问题 389

装饰模式C++实现

装饰模式主要的应用场景是通过多个子类修改对象本身的属性。如游戏中人物换装备后,各属性的变化。对于增加新的装备的情况,采用装饰模式可以保持原有框架不变,只需增加对应装饰类即可。而对于变装,只需在客户端修改装饰操作即可。 类图结构如下:      实现如下: MyComponent.h   #pragma once class MyComponent { public:

mz5111089的专栏 372

C++设计模式——装饰模式(decorator pattern)

一、原理讲解 图1 装饰者模式UML图 1.1意图 装饰模式目的是:动态地给一个对象添加一些额外的职责,比生成之类更灵活。 1.2常用场景 一般用于给某个对象添加某个功能,但是又不希望更改该对象底层抽象借口,同时该功能可以动态增删,这时可以考虑用装饰者模式。 1.3实行方法 如图1所示,装饰着Decorator通过继承抽象基类Component,又组合一个Component指针*component,通过重写从Component继承而来的虚函数operation(),在里面用指针调用oper.

净无邪博客 886

开源处理器Rocket的分支预测机制研究与性能评估(二)

Rocket是基于RISC-V指令集架构的开源处理器,具有分支预测功能,其实现了GShare分支预测机制,在分析Rocket处理器分支预测处理过程、分支预测实现原理的基础上,利用模拟器进行了性能测试,并依据测试结果,对Rocket处理器分支预测参数配置给出建议。

leishangwen的专栏 5691

【C++设计模式】装饰器模式

模式定义: 动态(组合)的给一个对象增加一些额外的职责,就增加功能而言Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数)。 假设我们需要设计如下一个功能的程序: 1.对各种流的读取、写入和定位 2.添加对各种流的加密以及缓冲或者又加密又缓冲的功能。 那么我们最初设计的类(版本一)可能如下: //业务操作 class Stream{ public: virtual char Read(int number)=0; virtual void Seek(i

qq_33197518的博客 247

CATIA CAA开发环境搭建避坑指南:从授权服务到VS配置全流程

本文提供了一份详尽的CATIA CAA开发环境搭建避坑指南,涵盖从授权服务(DSLS)安装、Visual Studio版本匹配与集成配置,到编译调试全流程。重点解析了授权服务无法连接、模块加载失败等典型问题的解决方案,强调版本严格对应与纯英文环境是成功搭建的关键。

redis7keeper的博客 573

abaqus2matlab的安装与使用:如何用matlab提取abaqus的odb结果

官网abaqus2matlab官网地址matlab社区地址matlab社区地址在这里可以看到.m文件的源码论文:Abaqus2Matlab: A suitable tool for finite element post-processingabaqus2matlab可以处理.inp、.fil、.odb三种类型的文件。.inp文件:处理功能就在于只是单纯的输出inp文件,由于我自己写了自己的函数,不需要用到这个功能。

qianxin1234的博客 2019

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

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

m0_61629312的博客 1400

Jenkins中文显示不全?三步搞定Locale插件+汉化包的正确安装姿势

本文针对Jenkins界面中文显示不全问题,提供从原理到实战的深度解决方案。文章详细解析了Locale插件与中文语言包的核心机制,并分步指导如何通过配置JVM环境、正确安装插件及执行深度排查,彻底解决汉化顽疾,实现Jenkins界面的完美中文显示。

weixin_42611310的博客 259

【设计模式学习笔记】代理模式、装饰模式和适配器模式案例详解(C++实现)

设计模式之代理模式、装饰模式、适配器模式详解以及C++案例。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 619

[模型部署]-[LLM]昇腾部署Qwen3-Coder-30B-A3B-Instruct

摘要:本文介绍了在Ascend NPU上部署Qwen3-Coder-30B-A3B-Instruct大模型的实践过程。通过vLLM-Ascend框架,详细说明了环境准备(CANN 8.1、PyTorch-NPU 2.5.1等)、模型下载、容器启动及服务部署步骤,包括vLLM服务的启动参数配置和接口测试方法。测试结果显示在当前2卡910B3配置下性能表现仅为8token/s(1并发),并指出流式调用时存在无法输出usage信息的问题。该方案为Ascend平台私有化部署大模型推理服务提供了参考实现。

1671

git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案

本文主要介绍了git clone出现fatal: unable to access Failed to connect to github.com port 443: Timed out解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 23万+

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

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

慢慢记录,慢慢更新。 2001

基于Simulink的伺服电机位置闭环控制仿真

本文带你从零构建了伺服电机位置闭环控制系统​ 的完整Simulink仿真模型,实现了:✅ 搭建PMSM伺服电机、逆变器、机械臂负载的主电路与编码器反馈模型;✅ 用MATLAB Function实现三环控制(位置环PID、坐标变换、电流环PI);✅ 验证阶跃定位(稳态误差0.002°、响应0.08s)与正弦跟踪(误差0.008°)的高性能;✅ 对比开环控制,明确位置闭环在精度、响应、抗扰上的优势;✅ 理解“三环嵌套+反馈校正”的核心思想(精密定位的工程实现)。核心收获。

amy_mhd的博客 173

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

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

m_wordPlan的博客 357

Transformer实战(39)——多模态生成式Transformer

能够理解多种类型输入的模型被称为多模态模型。多模态学习是人工智能 (Artificial Intelligence, AI) 领域的重要研究方向之一,长期受到众多研究人员的关注。本节将介绍使用多模态模型的生成式 AI,包括文本到图像 (text-to-image) 和文本到音乐 (text-to-music) 的生成模型。将介绍 Stable Diffusion 及其工作原理,同时也将介绍 MusicGen 和 AudioGen 模型。

盼小辉丶的博客 2460

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

shu_chang1993的博客 178

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

C++ · 设计模式 (单一职责=Decorator<装饰模式>)

装饰模式属于结构型设计模式动态地给一个对象添加额外的职责。就增加功能来说,装饰模式比生成子类更为灵活。装饰模式是C++中实现动态功能扩展的强大工具,特别适合需要保持代码开闭原则的场景。

qq_35223555的博客 956

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++ 设计模式学习## 之Decorator 装饰模式

** C++ 设计模式学习## 之Decorator 装饰模式 1.定义 Attach additional responsibilities to an object dynamically keeping the same interface. Decorators provide a flexible alternative to subclassing for extending functionality。 动态地给一个对象添加一些额外的职责。就增加功能来说, 装饰模式相比生成子类 更为灵活。 2

chengwang2012的博客 229

重温设计模式----装饰模式

动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式必生成子类更加灵活装饰模式(Decorator Pattern)属于结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。装饰模式,其实可以理解为套娃,一层套一层。

doubleintfloat的博客 677

【Decorator模式】C++设计模式——装饰模式

C++的装饰器模式、Decorator模式,本文用简单的对比、代码分析、结构图清晰的讲解使用装饰器模式的好处

不负AC不负卿的博客 1100
上一篇: 超级详细解释KMP算法(next数组的前世今生)
下一篇: 进程间通信的方式及原理
黑猫爱小鹿
博客等级 码龄8年 1万+粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值