当前位置: 首页 > news >正文

《桥接模式(极简c++)》

        本文章属于专栏《设计模式(极简c++版)》


         继续上一篇《原型模式(极简c++)》。本章简要说明桥接模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。

  • 模式说明
    • 方案: 将抽象部分与它的实现部分分离,使多个组合在一起的品类可以独立变化。
    • 优点:
      • 分离抽象和实现部分,使得它们可以独立地变化,易于扩展。
      • 通过对象组合而不是继承的方式实现解耦,提高了代码的灵活性。
    • 缺点:
      • 增加了系统的复杂度,因为需要多个抽象类和实现类。
  • 本质思想:用一个抽象类组合另外一个抽象类,如形状和颜色,在构建时,使用具体的类完成组合,如红色的正方形。
  • 实践建议:一个基础主体包含多个属性时,都可以使用。该模式能很好地保留设计时的模块语义,方便未来维护
#include <iostream>// 实现部分接口:颜色
class Color {
public:virtual void applyColor() const = 0;
};// 具体实现类:红色
class RedColor : public Color {
public:void applyColor() const override {std::cout << "Red" << std::endl;}
};// 具体实现类:绿色
class GreenColor : public Color {
public:void applyColor() const override {std::cout << "Green" << std::endl;}
};// 抽象部分类:形状
class Shape {
protected:Color* color;public:Shape(Color* c) : color(c) {}virtual void draw() const = 0;
};// 扩展的抽象部分类:圆形
class Circle : public Shape {
public:Circle(Color* c) : Shape(c) {}void draw() const override {std::cout << "Drawing Circle with color ";color->applyColor();}
};// 扩展的抽象部分类:矩形
class Rectangle : public Shape {
public:Rectangle(Color* c) : Shape(c) {}void draw() const override {std::cout << "Drawing Rectangle with color ";color->applyColor();}
};int main() {Color* red = new RedColor();Color* green = new GreenColor();Shape* redCircle = new Circle(red);Shape* greenRectangle = new Rectangle(green);redCircle->draw(); // 输出: Drawing Circle with color RedgreenRectangle->draw(); // 输出: Drawing Rectangle with color Greendelete red;delete green;delete redCircle;delete greenRectangle;return 0;
}

相关文章:

《桥接模式(极简c++)》

本文章属于专栏《设计模式&#xff08;极简c版&#xff09;》 继续上一篇《原型模式&#xff08;极简c&#xff09;》。本章简要说明桥接模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明 方案&#xff1a; 将抽象部分与它的实现部分分离&#xff0c…...

jconsole的使用

前提 已安装jdk 使用步骤 1、命令行输入jconsole...

JavaScript详细教程

文章目录 前言一、代码位置二、注释三、变量1.字符串类型2.数组3.对象&#xff08;字典&#xff09; 四、条件语句五、函数六、DOM模板 前言 JavaScript 是一种脚本编程语言&#xff0c;它可以在网页上实现复杂的功能&#xff0c;网页展现给你的不再是简单的静态信息&#xff0…...

Hive自定义GenericUDF函数

Hive自定义GenericUDF函数 当创建自定义函数时&#xff0c;推荐使用 GenericUDF 类而不是 UDF 类&#xff0c;因为 GenericUDF 提供了更灵活的功能和更好的性能。以下是使用 GenericUDF 类创建自定义函数的步骤&#xff1a; 编写Java函数逻辑&#xff1a;编写继承自 GenericUDF…...

伊理威科技:抖音开网店新手刚做选啥品

在数字浪潮中&#xff0c;抖音不仅是展示才艺的舞台&#xff0c;更是创业者的新天地。新手若想在这片热土上开垦网店&#xff0c;选品便是首要课题。选择产品如同种下希望的种子&#xff0c;既要考量土壤肥沃度&#xff0c;也得预测风雨适宜期。 兴趣与专长是选品的罗盘。热爱所…...

【爬虫】专栏文章索引

为了方便 快速定位 和 便于文章间的相互引用等 作为一个快速准确的导航工具 爬虫 目录&#xff1a; &#xff08;一&#xff09;web自动化和接口自动化 &#xff08;二&#xff09;实战-爬取Boss直聘信息数据...

【Linux】Linux开发工具-vim / 编译器-gcc/g++ / 调试器-gdb / git操作 / 项目自动化构建工具-make/Makefile

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;Linux_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.在Linux写自己的第一个程序 1.1 nano指令 1.2 nano指令的使用 1.2.1 介绍 1.2.2 演示 1.2.2.1 创建.c文件 1.2.2.2 nano cod…...

解决VM重新打开后找不到共享文件夹的问题

我的问题是之前按照网上的文档设置了vm的共享文件夹&#xff0c;能成功使用&#xff0c;但是问题是下一次打开之后就找不到了&#xff0c;虚拟机设置里共享文件夹是启用的&#xff0c;文件夹也完成了映射网络驱动器&#xff0c;但是就是找不到共享文件夹 解决方法&#xff1a;…...

uni app 空挡接龙

pc游戏 空挡接龙 还不完整。现在没时间搞了记录在这里&#xff0c;等以后有时间了再继续搞。 <template><view class"page_main"><view class"contentone"><canvas class"canvas_cla" style"z-index: 1;" canva…...

oracle表备份及还原

工作中&#xff0c;经常使用Navicat访问及操作Oracle数据库&#xff0c;备份表非常方便Ctrlc、Ctrlv&#xff1b;最近备份表&#xff0c;发现这种操作有问题&#xff1b;数据表有2条检查&#xff0c;使用Ctrlc、Ctrlv操作&#xff0c;发现新备份的表出现4条检查&#xff0c;再对…...

牛客小白月赛89补题1(ABCD)(偏难)

评价&#xff1a; 高情商&#xff1a;收获很大 &#xff0c;让自己进一步认清自己。 低情商&#xff1a;题目难&#xff0c;自己太菜了。 今天还有一些其他事&#xff0c;剩下的题明天再补。 我们从a题开始吧&#xff1a; A.签到 我们只要看看其中的max与min是否不符合即可…...

内存条@电脑支持的最大内存@升级内存硬件

文章目录 电脑支持的最大内存规格cpu官网查看支持的规格命令行查看脚本化 DDR内存LPDDR内存内存升级扩展&#x1f47a;插槽检查板载内存SPD内存厂商其他 内存参数&#x1f47a;性能指标使用软件查看更多内存相关的软件工具 电脑支持的最大内存规格 确认电脑最大支持内存大小和频…...

如何了解AI基础概念

1. **在线课程和教程&#xff1a;** - 寻找在线AI课程或教程&#xff0c;例如Coursera、edX、Udemy等平台上的课程。这些课程通常会从基础概念开始介绍&#xff0c;逐步深入。 2. **书籍阅读&#xff1a;** - 阅读与AI相关的书籍&#xff0c;如《Python深度学习》、《机…...

Apache James数据库存储用户信息的密码加密问题

项目场景 Apache James邮件服务器使用数据库来存储用户信息的密码加密问题&#xff1a; 将James的用户改为数据库存储James密码是如何加密验证的 1.将James的用户改为数据库存储 1、修改存储方式 找到james-2.3.2\apps\james\SAR-INF\config.xml 找到<users-store>标…...

大数据分布式事务的深入理解?

在一个大数据系统内部分布式事务无处不在&#xff0c;但凡一个任务分布到多台机器上执行就会涉及到分布式事务的场景&#xff0c;分布式事务一直以来都是分布式系统比较难以解决的问题。 事务的理解&#xff0c;比如你要将账户A转1块钱到账户B中&#xff0c;那么这个行为在执行…...

LeetCode hot100-17

41. 缺失的第一个正数给你一个未排序的整数数组 nums &#xff0c;请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 这题要求空间复杂度为O(1)&#xff0c;要么定义单个变量&#xff0c;要么原地操作。定义长度为n的数…...

java网络原理(二)------TCP确认应答和超时重传

一Tcp协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节&#xff0c;范围是0到65535.如…...

机器学习:智能时代的核心引擎

目录 一、什么是机器学习 二、监督学习 三、无监督学习 四、半监督学习 五、强化学习 一、什么是机器学习 机器学习是人工智能的一个分支&#xff0c;它主要基于计算机科学&#xff0c;旨在使计算机系统能够自动地从经验和数据中进行学习并改进&#xff0c;而无需进行明确…...

Docker-Image

Docker Docker 镜像是什么为什么需要镜像镜像命令总览docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker image inspectdocker historydocker importdocker image prunedocker build Docker 镜像是什么 Docker image 本质上是一个 read-on…...

YOLOv8 如何实现多主干特征融合方式 | GhostNet+ShuffleNet / SwinTransformer+ShuffleNet

文章目录 前言模块添加方法双特征提取例子`GhostNet+ShuffleNet` 双主干结构图代码`Swin+ShuffleNet` 双主干结构图代码参数量与计算量1. 什么是YOLO-Magic框架?2. 如何加入这个框架?3. 加入后如何使用框架?4. GitHub组织是什么?...

Win11Debloat:重构Windows 11系统体验的开源优化工具

Win11Debloat&#xff1a;重构Windows 11系统体验的开源优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cus…...

3个突破性功能:开源工具实现Cursor限制解除与效率提升完全指南

3个突破性功能&#xff1a;开源工具实现Cursor限制解除与效率提升完全指南 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Your request has been blocked as our system has detected suspicious activity / Youve reached your trial request…...

解密OpenStego:重新定义信息隐藏的颠覆性方案

解密OpenStego&#xff1a;重新定义信息隐藏的颠覆性方案 【免费下载链接】openstego OpenStego is a steganography application that provides two functionalities: a) Data Hiding: It can hide any data within an image file. b) Watermarking: Watermarking image files…...

【读论文】2013 NP 自由空间光双向时间频率传递

法布里齐奥R乔治塔*、威廉C斯旺、劳拉C辛克莱尔、埃丝特鲍曼、伊恩科丁顿、内森R纽伯里* 美国国家标准与技术研究院&#xff0c;科罗拉多州博尔德市百老汇大街325号&#xff0c;80305 *电子邮箱&#xff1a;fabrizionist.gov&#xff1b;nnewburyboulder.nist.gov 本研究为美国…...

开源工具助力音频内容管理:打破平台限制的跨平台解决方案

开源工具助力音频内容管理&#xff1a;打破平台限制的跨平台解决方案 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 你是否曾遇到…...

从监控盲区到业务洞察:深入解读 APMPlus 生产指标

在数字化浪潮席卷各行各业的今天&#xff0c;企业系统规模持续扩张&#xff0c;服务间调用关系日益交错&#xff0c;这使得许多“看不见的问题”正逐渐成为业务稳定性的巨大隐患。 你是否也曾遇到过这些棘手的场景&#xff1f; 偶发错误难量化&#xff1a;用户反馈“系统偶尔会…...

3步构建企业级认证系统实战指南:从0到1搭建安全认证中心

3步构建企业级认证系统实战指南&#xff1a;从0到1搭建安全认证中心 【免费下载链接】oauth2-server spring boot (springboot 3) oauth2 server sso 单点登录 认证中心 JWT,独立部署,用户管理 客户端管理 项目地址: https://gitcode.com/gh_mirrors/oau/oauth2-server …...

GPT-6 Spud深度解析:Symphony架构、双系统推理与OpenAI的AGI豪赌

上一篇 GPT-6 Spud倒计时AI格局变局&#xff1a;2026年4月第一周全景扫描 下一篇 DeepSeek V4全面换装华为昇腾950PR&#xff1a;从CUDA到CANN的国产算力里程碑 摘要 GPT-6&#xff08;内部代号"Spud/土豆"&#xff09;预计于2026年4月14日正式发布&#xff0c;这是…...

计算机二级C语言常考选择题

经原国家教育委员会&#xff08;现教育部&#xff09;批准、由教育部考试中心主办、面向社会、用于考查非计算机专业应试人员计算机应用知识与技能的全国性计算机水平考试体系&#xff0c;是全国计算机等级考试&#xff08;National Computer Rank Examination&#xff0c;以下…...

FanControl中文界面深度定制指南:零基础打造个性化风扇控制中心

FanControl中文界面深度定制指南&#xff1a;零基础打造个性化风扇控制中心 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tr…...