桥接模式与适配器模式

一、共性和区别       

      桥接设计模式和适配器设计模式的共同点和明显,它们都是使两种不同的类配合工。

       二者的区别在于,适配器模式是将已有的两个不同接口接口组合到一起,使得适配器同时拥有两个不同接口的功能,其目的是使两个不兼容的接口协调工作;桥接模式目的是抽象和实现分离,实现的改变不影响抽象,抽象的变化不影响实现,可以有效的应对具体业务的变化,以及业务实现的横向扩展。

二、桥接模式

1、函数类声明

#ifndef BRIDGE_H
#define BRIDGE_H
#include <iostream>
using namespace std;///定义抽象业务类
class  AbstractObj{
public:virtual  void  abstractOpt()=0;
};/// 定义具体业务实现类A
class  ObjImplA: public AbstractObj{
public:ObjImplA();~ObjImplA();void   abstractOpt()  override;
};/// 定义具体的业务实现了B
class  ObjImplB: public AbstractObj{
public:ObjImplB();~ObjImplB();void abstractOpt()  override;
};/// 定义桥器
class IBridge{
public:virtual void   bridgeOpt()=0;
};/// 桥接器具体实现
class  BridgeImpl: public IBridge{
/// 桥接器持有对抽象业务类的引用,不考虑具体实现,这样不管具体的业务怎么处理,都不会影响到接口,随着业务的扩张,业务横向增加,对于用户是无感的,用户只需要通过桥接器动态调用即可    
private:AbstractObj*  abstractObj;
public:BridgeImpl(AbstractObj*  abstractObj);~BridgeImpl();void bridgeOpt() override;
};#endif 

2、函数定义

#include "./bridge.h"ObjImplA::ObjImplA(){}
ObjImplA::~ObjImplA(){}
void ObjImplA::abstractOpt(){std::cout << "ObjImplA call  abstractOpt  function" << std::endl;
}ObjImplB::ObjImplB(){}
ObjImplB::~ObjImplB(){}
void  ObjImplB::abstractOpt(){std::cout << "ObjImplB call  abstractOpt  function" << std::endl;
}BridgeImpl::BridgeImpl(AbstractObj*  abstractObj){this->abstractObj = abstractObj ;
}void BridgeImpl::bridgeOpt(){abstractObj->abstractOpt();
}

3、测试

 /// 处理B类业务
IBridge*  bridge = new BridgeImpl(new ObjImplB());
bridge->bridgeOpt();
/// 处理A类业务
bridge = new BridgeImpl(new ObjImplA());
bridge->bridgeOpt();

三、适配器模式 

 1、函数声明

#ifndef ADAPTER_H
#define ADAPTER_H
#include  <iostream>
#include <string.h>
using namespace std;/// 场景设定,笔记本上只有HDMI接口,而手中只有一根VGA的线,要想把这个VGA得线连到笔记本,就需要一个HDMI的转接头,这就典型的适配器模式///  定义适配者vga VAG线
class Vga{
protected:string vgaTran();
};/// 定义适配接口  hdmi接口
class  IHdmi{
public:virtual void hdmiIO()=0;
};/// 定义适配器 hdmi 转接头
class HdmiAdapter : public Vga,public IHdmi {
public:void hdmiIO()  override;
};#endif
#include "adapter.h"string Vga::vgaTran(){///  使用vga线传输信号return "vga data line  tran signal";
}void  HdmiAdapter::hdmiIO(){string singal = this->vgaTran();/// 使用hdmi接口输出vga传输的信号cout<< "hdmi  output : " << singal << endl;
}

2、业务调用

  HdmiAdapter*  adapter = new  HdmiAdapter();adapter->hdmiIO();

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)project(dpcode LANGUAGES CXX)set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)add_executable(dpcode main.cppbridge.hbridge.cppadapter.hadapter.cpp)include(GNUInstallDirs)
install(TARGETS dpcodeLIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

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

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

相关文章

Spring Boot与微服务治理框架的集成方法

Spring Boot与微服务治理框架的集成方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在当今快速发展的软件开发领域&#xff0c;微服务架构因其灵活性、可…

华为DCN之:SDN和NFV

1. SDN概述 1.1 SDN的起源 SDN&#xff08;Software Defined Network&#xff09;即软件定义网络。是由斯坦福大学Clean Slate研究组提出的一种新型网络创新架构。其核心理念通过将网络设备控制平面与数据平面分离&#xff0c;从而实现了网络控制平面的集中控制&#xff0c;为…

移动网络捕获在数字化转型中的重要性

数字化转型重新定义了企业运营和与客户互动的方式。它为组织提供价值的方式带来了根本性的转变&#xff0c;使流程更易于访问、更高效、更具协作性和更安全。然而&#xff0c;跟上不断发展的数字环境可能是一项挑战&#xff0c;而未能接受数字化转型的企业则面临被淘汰的风险。…

表达式二叉树的应用

在计算机科学的广阔领域中,数据结构是构建高效程序和算法的基石。其中,表达式二叉树(Expression Tree)是一种特殊而强大的数据结构,它将数学表达式的解析和计算转化为直观的图形表示,不仅简化了复杂的运算过程,还为编译器设计、计算器应用以及符号数学软件提供了坚实的基…

(八)EBO和glDrawElements

EBO EBO(Element Buffer Object)&#xff1a;元素缓冲对象&#xff0c;用于存储顶点绘制顺序索引号的GPU显存区域 unsigned int indices[] {0, 1, 2,2, 1, 3};//EBO创建和绑定GLuint ebo 0;glGenBuffers(1, &ebo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);glBufferD…

【MindSpore学习打卡】应用实践-计算机视觉-ShuffleNet图像分类:从理论到实践

在当今的深度学习领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;已经成为图像分类任务的主流方法。然而&#xff0c;随着网络深度和复杂度的增加&#xff0c;计算资源的消耗也显著增加&#xff0c;特别是在移动设备和嵌入式系统中&#xff0c;这种资源限制尤为突出。…

25计算机考研,这些学校双非闭眼入,性价比超高!

计算机考研&#xff0c;好的双非院校也很多&#xff01; 对于一些二本准备考研的同学来说&#xff0c;没必要一直盯着985/211这些院校&#xff0c;竞争激烈不说&#xff0c;容易当陪跑&#xff0c;下面这些就是不错的双非院校&#xff1a; 燕山大学南京邮电大学南京信息工程大…

WPS-Word文档表格分页

一、问题描述 这种情况不好描述 就是像这种表格内容&#xff0c;但是会有离奇的分页的情况。这种情况以前的错误解决办法就是不断地调整表格的内容以及间隔显得很乱&#xff0c;于是今天去查了解决办法&#xff0c;现在学会了记录一下避免以后忘记了。 二、解决办法 首先记…

《昇思25天学习打卡营第5天 | mindspore 网络构建 Cell 常见用法》

1. 背景&#xff1a; 使用 mindspore 学习神经网络&#xff0c;打卡第五天&#xff1b; 2. 训练的内容&#xff1a; 使用 mindspore 的 nn.Cell 构建常见的网络使用方法&#xff1b; 3. 常见的用法小节&#xff1a; 支持一系列常用的 nn 的操作 3.1 nn.Cell 网络构建&…

【FFmpeg】关键结构体的初始化和释放(AVFormatContext、AVIOContext等)

目录 1.AVFormatContext1.1 初始化&#xff08;avformat_alloc_context&#xff09;1.2 释放&#xff08;avformat_free_context&#xff09; 2.AVIOContext2.1 初始化&#xff08;avio_alloc_context&#xff09;2.2 释放&#xff08;avio_context_free&#xff09; 3. AVStre…

8.SQL注入-基于insert,update利用案例

SQL注入-基于insert/update利用案例 sql语句正常插入表中的数据 insert into member(username,pw,sex,phonenum,address,email) values(xiaoqiang,1111,1,2,3,4); select * from member;例如插入小强数据&#xff0c;如图所示&#xff1a; 采用or这个运算符&#xff0c;构造…

实测有效:Win11右键默认显示更多

Win11最大的变化之一莫过于右键菜单发生了变化&#xff0c;最大的问题是什么&#xff0c;是右键菜单很多时候需要点两次&#xff0c;实在是反人类 第一步 复制以下命令直接运行&#xff1a; reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905ba…

python_zabbix

zabbix官网地址&#xff1a;19. API19. APIhttps://www.zabbix.com/documentation/4.2/zh/manual/api 每个版本可以有些差异&#xff0c;选择目前的版本在查看对于的api接口#token接口代码 import requests apiurl "http://zabbix地址/api_jsonrpc.php" data {&quo…

web的学习和开发

这个使同步和异步的区别 今天主要就是学了一些前端&#xff0c;搞了一些前端的页面&#xff0c;之后准备学一下后端。 我写的这个项目使百度贴吧&#xff0c;还没有写er图。 先看一下主界面是什么样子的。 这个是主界面&#xff0c;将来后面的主要功能点基本上全部是放在这个上…

推动能源绿色低碳发展,风机巡检进入国产超高清+AI时代

全球绿色低碳能源数字转型发展正在进入一个重要窗口期。风电作为一种清洁能源&#xff0c;在碳中和过程中扮演重要角色&#xff0c;但风电场运维却是一件十足的“苦差事”。 传统的风机叶片人工巡检方式主要依靠巡检人员利用高倍望远镜检查、高空绕行下降目测检查(蜘蛛人)、叶…

STM32——Modbus协议

一、Modbus协议简介&#xff1a; 1.modbus介绍&#xff1a; Modbus是一种串行通信协议&#xff0c;是Modicon公司&#xff08;现在的施耐德电气 Schneider Electric&#xff09;于1979年为使用可编程逻辑控制器&#xff08;PLC&#xff09;通信而发表。Modbus已经成为工业领域…

PythonConda系列(亲测有效):【解决方案】Collecting package metadata (current_repodata.json): failed

【解决方案】Collecting package metadata (current_repodata.json&#xff09;: failed 问题描述解决方案小结参考文献 问题描述 在cmd下运行&#xff1a;conda install pylint -y&#xff0c;报错如下&#xff1a; C:\Users\apr> conda install --name apr pylint -y Co…

PDF压缩工具选哪个?6款免费PDF压缩工具分享

PDF文件已经成为一种常见的文档格式。然而&#xff0c;PDF文件的体积有时可能非常庞大&#xff0c;尤其是在包含大量图像或复杂格式的情况下。选择一个高效的PDF压缩工具就显得尤为重要。小编今天给大家整理了2024年6款市面上反响不错的PDF压缩文件工具。轻松帮助你找到最适合自…

漆包线行业生产管理革新:万界星空科技MES系统解决方案

一、引言 在科技日新月异的今天&#xff0c;万界星空科技凭借其在智能制造领域的深厚积累&#xff0c;为漆包线行业量身打造了一套先进的生产管理执行系统&#xff08;MES&#xff09;解决方案。随着市场竞争的加剧&#xff0c;漆包线作为电气设备的核心材料&#xff0c;其生产…

React+TS前台项目实战(二十四)-- 绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件&#xff0c;是通过传入的信息&#xff0c;绘制在二维码上&#xff0c;可用于很多场景&#xff0c;如区块链项目中的区块显示交易地址时就可以用到…