装饰器模式详解

8.9.6 装饰器模式

​ 装饰器模式是一种结构型模式,主要是给一个类添加更多功能;

示例代码:

#include <iostream>
#include <string>// 抽象基类:文本修饰器
class TextDecorator {
public:virtual std::string decorate(const std::string& text) const = 0;
};// 具体修饰器:加粗修饰器
class BoldDecorator : public TextDecorator {
public:std::string decorate(const std::string& text) const override {return "<b>" + text + "</b>";}
};// 具体修饰器:斜体修饰器
class ItalicDecorator : public TextDecorator {
public:std::string decorate(const std::string& text) const override {return "<i>" + text + "</i>";}
};int main() {// 原始文本std::string text = "Hello, world!";// 创建修饰器对象TextDecorator* boldDecorator = new BoldDecorator();TextDecorator* italicDecorator = new ItalicDecorator();// 使用装饰器修饰文本std::string boldText = boldDecorator->decorate(text);std::string italicText = italicDecorator->decorate(text);// 显示修饰后的文本std::cout << "Bold Text: " << boldText << std::endl;std::cout << "Italic Text: " << italicText << std::endl;// 释放内存delete boldDecorator;delete italicDecorator;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725252.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件中级设计师——计算机系统知识

前言 计算机系统知识点&#xff08;第一章&#xff09;。 文章目录 前言一、计算机系统1、CPU2、运算器3、控制器 一、计算机系统 1、CPU 主要由控制器和运算器组成&#xff1b; 控制器 功能 程序控制&#xff1b;操作控制&#xff1b;时间控制&#xff1b; 运算器 功能 数据…

自定义过滤器实现对请求报文统一解密对响应加密

工作中经常会遇到这样的情况,前端(Android或vue等)跟后台通讯时需要对报文做加密和签名处理,但是后端微服务之间调用是明文,这种情况可以考虑通过自定义过滤器的方式实现。 前端在请求头里增加特定字段表示是前端请求,报文是否需要加密,后端自定义过滤器获取请求时根据请…

一文了解 ArrayList 的扩容机制

了解 ArrayList 在 Java 中常用集合类之间的关系如下图所示&#xff1a; 从图中可以看出 ArrayList 是实现了 List 接口&#xff0c;并是一个可扩容数组&#xff08;动态数组&#xff09;&#xff0c;它的内部是基于数组实现的。它的源码定义如下&#xff1a; public class A…

通过hyperbeam创建梁单元截面属性

1、为模型中标准的圆柱形创建梁单元和赋予属性&#xff1b; 2、为模型中不标准的对称性实体创建梁单元和赋予属性&#xff1b; 3、为模型中壳体部分创建梁单元和赋予属性&#xff1b;

Linux系统之rename命令的基本使用

Linux系统之rename命令的基本使用 一、rename命令介绍二、raname工具版本2.1 C语言版本2.2 Perl版本 三、centos下的rename使用3.1 基本语法3.2 命令选项3.3 rename的基本使用 四、ubuntu下的rename使用4.1 基本语法4.2 命令选项4.3 rename命令的基本操作 五、rename注意事项 一…

“色狼”用英语怎么说?柯桥日常英语,成人英语口语学习

最近有粉丝问我"色狼"英文翻译是啥 首先声明不是"colour wolf"哈 关于“色狼”的英文表达有很多 快和C姐一起来看看吧&#xff01; 1.pervert 这个单词的意思是变态、色狼 是对性变态者最直观的描述 He is such a pervert&#xff01; I saw him lo…

【Java】Spring的ReflectionUtils类常用方法学习笔记

目录 ReflectionUtils介绍 常用方法 访问字段 方法调用 处理回调 示例 脑容量不够了&#xff0c;以简单的小知识作为一天的结尾吧(悲 ReflectionUtils介绍 ReflectionUtils是Spring Framework中非常实用的一个工具类&#xff0c;为开发人员提供了简便的反射操作方法&am…

三星Foundry决定对其第二代3纳米级别的制造技术SF3进行重新命名

三星Foundry被报道已决定对其第二代3纳米级别的制造技术SF3进行重新命名&#xff0c;将其改为2纳米级别的生产工艺SF2&#xff0c;这意味着相关的合同需要重写。据ZDNet报道&#xff0c;这次更名可能是三星为了简化工艺命名&#xff0c;并试图在视觉上更好地与英特尔Foundry竞争…

学习基于 JavaScript 语言 的计算机界三大神书”之一 ——SICP

如何阅读“计算机界三大神书”之一 ——SICP 《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算…

Vue3组件通信之二_defineExpose编译器宏函数

Vue3组件通信之二_defineExpose编译器宏函数 文章目录 Vue3组件通信之二_defineExpose编译器宏函数1. defineExpose2.简单理解3. 实战案例1. 父子组件之间通信1. 子组件中通过defineExpose暴露属性或方法2. 父组件中使用子组件暴露的方法 2. 同级(兄弟)组件之间方法调用或传值1…

【算法可视化】模拟算法专题

运行平台 Algorithm Visualizer 神奇的幻方 [NOIP2015 提高组] 神奇的幻方 // import visualization libraries { const { Tracer, Array2DTracer, Array1DTracer, LogTracer, Randomize, Layout, VerticalLayout } require(algorithm-visualizer); // } function filledA…

微前端之什么是微前端

什么是微前端 微前端分类 基于路由的微前端&#xff1a;组件化微前端&#xff1a;iframe嵌入式微前端&#xff1a; 优点缺点 动态加载/懒加载微前端&#xff1a;微应用容器化方案&#xff1a; 微前端解决方案 single-spa阿里巴巴 Cloud Alfaiframe 方案Web ComponentsModule Fe…

关于Mybatis-Plus报错 Not Found TableInfoCache 解决办法

0. 接口结构&#xff1a;1. 方法报错&#xff1a;2. 解决方法&#xff1a;3. 原因分析&#xff1a; 0. 接口结构&#xff1a; 【接口】&#xff1a; public interface PurchaseOrderService extends IService<PurchaseOrder> {}【接口实现类】&#xff1a; public cla…

【Python】新手入门(5):# -*- coding: UTF-8 -*- 的作用详解

【Python】新手入门&#xff08;5&#xff09;&#xff1a;# -*- coding: UTF-8 -*- 的作用详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础…

spring ResponseBodyAdvice 失效 不起作用

## spring web ResponseBodyAdvice 当 请求 controller 的RequestMapping void 方法时&#xff0c; 如果方法参数包含HttpServletResponse参数就会失效。 解决方法&#xff1a; 一、去掉HttpServletResponse参数 二、把void 改成对象&#xff0c;然后使用return 手动返回值。

ssm基于javaEE+springboot校园闲置二手物品拍卖交易平台_ngad7

为提升浏览用户观感及使用体验&#xff0c;本系统要具有易用性和美观性。通过页面的简单提示就可完成操作&#xff0c;校园闲置物品交易平台展示界面应该清楚简洁&#xff0c;使用户通过美观的前台页面能快速定位想要浏览的校园闲置物品交易平台信息。后台界面也应简约&#xf…

Servlet: 噩梦开始的地方

在Web开发的世界里&#xff0c;Servlet技术占据了历史的长河。它是Java EE规范的一部分&#xff0c;为Web应用提供了动态生成Web内容的方法。尽管Servlet为Java Web开发奠定了基石&#xff0c;随着技术的演进和新需求的出现&#xff0c;开发者们逐渐发现&#xff0c;与现代Web开…

java岗位面试题总结,关于网络优化你必须要知道的重点

前言 最近有很多朋友向我求教经验&#xff0c;因为我自己工作相对于稳定&#xff0c;在这里给大家分享一个粉丝朋友的经历&#xff0c;他作为一个曾经的菜鸡面试者&#xff0c;在不断的失败中成长&#xff0c;最终斩获了多份offer&#xff0c;因此特别想在此分享一下他的面试成…

【C++精简版回顾】20.模板的使用

1.模板起源 1.模板的定义 1.针对函数属性模板 //针对函数属性 template <class VOID > VOID print1(int a) {cout << a << endl; } 2.针对数据属性模板 //针对数据属性 template <typename INT,typename FLOAT> void print2(INT a,FLOAT b) {cout <…

从零学习Linux操作系统 第三十部分 部署Anisble

一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…