【设计模式】装饰器模式(Decorator Pattern)

embedded/2025/1/2 18:59:48/

定义

装饰器模式(Decorator Pattern)是一种结构型设计模式

装饰器模式通过创建一个装饰类,包装原始对象,并在保持原始对象接口不变的情况下,扩展其功能。

模式示例

#include <iostream>
#include <string>// 基础文本输出类
class TextOutput {
public:virtual void write(const std::string& text) {std::cout << text;}
};// 装饰器基类
class TextDecorator : public TextOutput {
protected:TextOutput* textOutput;
public:TextDecorator(TextOutput* output) : textOutput(output) {}void write(const std::string& text) override {textOutput->write(text);}
};// 具体的装饰器类:粗体
class BoldDecorator : public TextDecorator {
public:BoldDecorator(TextOutput* output) : TextDecorator(output) {}void write(const std::string& text) override {std::cout << "<b>" << text << "</b>";}
};// 具体的装饰器类:斜体
class ItalicDecorator : public TextDecorator {
public:ItalicDecorator(TextOutput* output) : TextDecorator(output) {}void write(const std::string& text) override {std::cout << "<i>" << text << "</i>";}
};int main() {// 创建基础文本输出对象TextOutput* textOutput = new TextOutput();// 创建装饰器并嵌套组合TextDecorator* boldDecorator = new BoldDecorator(textOutput);TextDecorator* italicDecorator = new ItalicDecorator(boldDecorator);// 输出文本italicDecorator->write("Hello, World!");// 释放内存delete italicDecorator;delete boldDecorator;delete textOutput;return 0;
}


http://www.ppmy.cn/embedded/150150.html

相关文章

pytorch nn.Parameter模块介绍

在 PyTorch 中&#xff0c;nn.Parameter 是一个用于定义可训练参数的模块。它通常用于自定义模型时&#xff0c;将张量注册为模型的一部分&#xff0c;使其在训练过程中能够被优化。 nn.Parameter 的作用 可训练性&#xff1a;将一个普通张量转换为 Parameter 后&#xff0c;…

【HENU】河南大学计院2024 操作系统 简答题复习

和光同尘_我的个人主页 一直游到海水变蓝。 单项选择 15x2 30 判断 10x1 10 简答 3x10 30 综合 3x10 30 简答题 简述操作系统的四个基本特征。 并发性 共享性 虚拟性 异步性 并发性是最重要特性&#xff0c;其它三种特性以此为前提。 并发 并发(Concurrence)&#…

2.5.3 文件使用、共享、保护、安全与可靠性

文章目录 文件使用文件共享文件保护系统安全与可靠性 文件使用 操作系统向用户提供操作级、编程级文件服务。 操作级服务包括目录管理&#xff0c;文件操作&#xff08;复制、删除、修改&#xff09;&#xff0c;文件管理&#xff08;设置文件权限&#xff09;。 编程级服务包括…

sqlalchemy-access库操作MS Access

因目前项目中数据处理的量稍大&#xff0c;为了方便和业务进行交互&#xff0c;对数据的加工和处理放到微软桌面数据库MS Access中。然后有些地方通过 Python 来操作 MS Access 数据库&#xff0c;用到 sqlalchemy-access库。本文对操作的要点做简单的描述。 之前写过一篇 Pyt…

使 el-input 内部的内容紧贴左边

<el-inputv-model"form.invitor"placeholder"PC端的自动取当前账号的手机号"readonlyclass"no-border-input" />::v-deep(.no-border-input .el-input__inner) { border: none; box-shadow: none; padding-left: 0; /* 确保内容紧贴左边 *…

最新版Chrome浏览器加载ActiveX控件技术——alWebPlugin中间件V2.0.28-迎春版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

flask-admin 在modelview 视图中重写on_model_change 与after_model_change

背景&#xff1a; 当我们在使用flask-admin进行WEB开发时应该第一时间想到的是竟可能使用框架推荐的modelView模型&#xff0c;其次才是自定义模型 baseview,因为只有modelview模型下开发才能最大限度的提高效率。 制作&#xff1a; 1、在modelview视图下框架会通过默认视图…

兰亭妙微:专注医疗 UI 设计,点亮数字化医疗新视界

医疗行业界面解决方案以医患使用者为中心&#xff0c;遵循行业使用习惯和表达方式&#xff0c;优化使用流程、设计简洁、人性化的操作界面&#xff0c;采用插画、三维动画、微动效的创作方法&#xff0c;让用户感受到愉悦易用美观的使用体验。蓝蓝设计与知名企业合作项目有&…