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

devtools/2024/12/28 1:57:19/

定义

装饰器模式(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/devtools/145985.html

相关文章

详细对比JS中XMLHttpRequest和fetch的使用

在JavaScript中&#xff0c;XMLHttpRequest 和 fetch 是两种用于进行 HTTP 请求的 API。它们的主要区别在于设计理念、用法和功能支持。以下是两者的详细对比&#xff1a; 1. 语法与用法 XMLHttpRequest: 较老的 API&#xff0c;最早出现在 2000 年代。支持异步和同步请求&…

【开发问题记录】eslint9 中 eslint 和 prettier冲突

文章目录 1、引言2、问题复现3、问题修复4、注意5、eslint-plugin-prettier/recommended 与自己的默认规则&#xff0c;冲突解决 1、引言 eslint 和 prettier 这俩都是在前端工程化中不可缺少的东西&#xff0c;但这俩&#xff0c;在一块运行的时候&#xff0c;总会有点问题 Es…

TP5 动态渲染多个Layui表格并批量打印所有表格

记录&#xff1a; TP5 动态渲染多个Layui表格每个表格设置有2行表头&#xff0c;并且第一行表头在页面完成后动态渲染显示内容每个表格下面显示统计信息可点击字段排序一次打印页面上的所有表格打印页面上多个table时,让每个table单独一页 后端代码示例&#xff1a; /*** Nod…

每天40分玩转Django:Django表单集

Django表单集 一、今日学习内容概述 学习模块重要程度主要内容表单集基础⭐⭐⭐⭐⭐表单集定义、基本用法内联表单集⭐⭐⭐⭐⭐内联表单、关联数据表单集验证⭐⭐⭐⭐自定义验证、错误处理动态表单集⭐⭐⭐⭐动态添加删除表单 二、基本模型定义 # models.py from django.db…

21天掌握JavaWeb - 第17天:前端页面开发与集成测试

目标 在本章节中&#xff0c;我们将学习如何根据后端API编写前端页面&#xff0c;并进行集成测试以确保前后端功能正常。 前端页面开发 核心概念 前端页面开发通常涉及HTML、CSS和JavaScript的使用&#xff0c;以构建用户界面和交互逻辑。 优势 用户体验&#xff1a;良好…

渗透测试发现漏洞产生原因以及解决方法|网络安全|渗透测试服务

渗透测试发现的问题 SQL注入攻击 原因 后端数据库过于信任前端传入数据 攻击方式&#xff1a; 通过前端输入相关SQL语句&#xff0c;使得后端数据库执行&#xff0c;套取数据库中的关键信息 解决方法&#xff1a; 对于前端传来的数据不直接进行操作数据库&#xff0c;而…

最长公共子序列【东北大学oj数据结构10-3】C++

题面 对于给定两个序列 X 和 Y , 序列 Z 是 X 和 Y 的公共子序列是指如果 Z 同时是 X 和 Y 的子序列。 例如&#xff1a;如果 X {a, b, c, b, d, a, b} 和 Y {b, d, c, a, b, a} , 那么序列 {b, c, a} 是 X 和 Y 的一个公共子序列。 但是序列 { b , c, a } 不是 X 和 Y 的最…

centos单机部署seata

文章目录 场景分析下载seata包启动 场景 centos7.9 jdk17 安装部署seata 分析 jdk和seata的版本对应关系如图 JDK版本 推荐 Seata 版本 理由 JDK 8 任何 Seata 版本 JDK 8 是 Seata 长期支持的版本&#xff0c;兼容性最好。 JDK 11 Seata 1.2.0 适合需要长期支持且性能较高的应…