C++二十三种设计模式之桥接模式

embedded/2025/1/8 4:44:42/

C++二十三种设计模式桥接模式

  • 一、组成
  • 二、特点
  • 三、目的
  • 四、缺点
  • 五、示例代码

一、组成

抽象类:声明功能接口,维护实现类的引用。
扩展抽象类:调用实现类功能接口,并实现自己的功能接口。
实现类:声明功能接口。
具体实现类:实现功能接口。

二、特点

1、抽象类包含实现类接口构成“桥”。
2、抽象类对实现类的引用以受保护的权限给子类继承。

三、目的

紧密相关的类拆分成抽象和实现两个独立的层次结构,通过组合的方式来代替继承。

四、缺点

1、性能问题,频繁的调用抽象类时,抽象类与实现类对象的引用关系有一定的性能损耗。
2、场景限制问题,适用于两个以上独立变化维度的情况。

五、示例代码

#include<iostream>
#include <vector>
#include <list>
#include <string>
#include <mutex>
#include <map>
#include<stack>using namespace std;class ImageOs;//实现类
class ImageOs_Windows;//具体实现类
class ImageOs_Linux; //具体实现类
class Image;//抽象类
class Image_PNG;//扩展抽象类
class Image_BMP; //扩展抽象类//实现类
class ImageOs {
public:virtual void draw(const char* pData, int len) = 0;virtual ~ImageOs() {cout << "~ImageOs" << endl;};
};
//具体实现类
class ImageOs_Windows : public ImageOs {
public:void draw(const char* pData, int len) {cout << "A picture was drawn on the Windows system" << endl;};~ImageOs_Windows() {cout << "~ImageOs_Windows" << endl;};
};class ImageOs_Linux : public ImageOs {
public:void draw(const char* pData, int len) {cout << "A picture was drawn on the Linux system" << endl;};~ImageOs_Linux() {cout << "~ImageOs_Linux" << endl;};
};//抽象类
class Image {
public:Image(ImageOs* imageOs) : m_imageOs(imageOs) {};virtual void parseFile(const char* pFileName) = 0;virtual ~Image() {cout << "~Image" << endl;};
protected:ImageOs* m_imageOs;//抽象类包含实现类接口构成“桥”
};//扩展抽象类
class Image_PNG : public Image {
public:Image_PNG(ImageOs* imageOs) : Image(imageOs) {}void parseFile(const char* pFileName) {char* pData = nullptr;int len = 0;cout << "Analyzed an image in PNG format" << endl;m_imageOs->draw(pData, len);};~Image_PNG() {cout << "~Image_PNG" << endl;}
};class Image_BMP : public Image {
public:Image_BMP(ImageOs* imageOs) : Image(imageOs) {}void parseFile(const char* pFileName) {char* pData = nullptr;int len = 0;cout << "Analyzed an image in BMP format" << endl;m_imageOs->draw(pData, len);};~Image_BMP() {cout << "~Image_BMP" << endl;}
};int main() {unique_ptr<ImageOs> imageOs_Windows = make_unique<ImageOs_Windows>();unique_ptr<ImageOs> imageOs_Linux = make_unique<ImageOs_Linux>();unique_ptr<Image_PNG> image_PNG = make_unique<Image_PNG>(imageOs_Windows.get());unique_ptr<Image_BMP> image_BMP = make_unique<Image_BMP>(imageOs_Linux.get());image_PNG->parseFile("1.png");image_BMP->parseFile("1.bmp");
}

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

相关文章

最好用的图文识别OCR -- PaddleOCR(1) 快速集成

最近在项目中遇到了 OCR 的需求&#xff0c;希望能够实现高效而准确的文字识别。由于预算限制&#xff0c;我并未选择商业付费方案&#xff0c;而是优先尝试了开源工具。一开始&#xff0c;我测试了 GOT-OCR2.0&#xff0c;但由于我的 Mac 配置较低&#xff0c;不支持 GPU 运算…

VVenC 编码器源码结构与接口函数介绍

VVenC VVenC&#xff08;Fraunhofer Versatile Video Encoder&#xff09;是由德国弗劳恩霍夫海因里希研究所&#xff08;Fraunhofer Heinrich Hertz Institute, HHI&#xff09;开发的一个开源的高效视频编码器。它实现了最新的视频编码标准——Versatile Video Coding (VVC)…

flink的EventTime和Watermark

时间机制 Flink中的时间机制主要用在判断是否触发时间窗口window的计算。 在Flink中有三种时间概念&#xff1a;ProcessTime、IngestionTime、EventTime。 ProcessTime&#xff1a;是在数据抵达算子产生的时间&#xff08;Flink默认使用ProcessTime&#xff09; IngestionT…

ESP32模组物联网方案,高性能通信无线交互,设备智能化升级应用

随着物联网技术的迅猛发展&#xff0c;我们的生活和工作方式正在发生众多变化。智能家居和工业自动化作为物联网应用的两大支柱&#xff0c;正在深刻地影响着我们的日常。 从家中的智能插座到工厂里的自动化生产线&#xff0c;物联网设备无处不在&#xff0c;它们通过无线网络…

EasyExcel监听器详解

EasyExcel监听器详解 EasyExcel 监听器概述 EasyExcel 是一个 Java 语言编写的简单易用的 Excel 操作框架。它的监听器机制允许开发者在读取或写入 Excel 文件时&#xff0c;以事件驱动的方式来处理数据&#xff0c;而不是一次性将整个 Excel 文件的数据加载到内存中。这种方式…

【超详细】前后端项目部署(原始Nginx+SpringBoot)

前后端项目部署原始[NginxSpringBoot] 一、前端部署 安装Nginx 下载源代码安装包并解压进入nginx目录并设置系统配置参数编译安装加环境变量查看nginx运行状态修改nginx配置文件 上传前端项目 解压 修改nginx配置公网访问 二、后端部署 安装Java安装Maven上传后端项目 Maven打…

CDN SSLTLS以及安全

随着互联网的发展&#xff0c;内容分发网络&#xff08;CDN&#xff09;在提升网站访问速度和安全性方面发挥了重要作用。然而&#xff0c;CDN在带来便利的同时也面临一些安全挑战。本文将探讨CDN的安全风险&#xff0c;并深入解析SSL/TLS加密技术及其在CDN中的应用。 CDN的安全…

Android折叠屏适配(权宜之计)

现在折叠屏手机出了也有一段时间了&#xff0c;但是除了大厂app&#xff0c;其他app适配折叠屏还是比较少&#xff0c;如果真的想做好折叠屏完全适配&#xff0c;那这个文章可能并不适合&#xff0c;这里只是一个简单适配的思路。 如果原先你的app已经适配了平板&#xff0c;那…