橋接模式與適配器模式

一、共性和區別? ? ? ?

? ? ? 橋接設計模式和適配器設計模式的共同點和明顯,它們都是使兩種不同的類配合工。

? ? ? ?二者的區別在于,適配器模式是將已有的兩個不同接口接口組合到一起,使得適配器同時擁有兩個不同接口的功能,其目的是使兩個不兼容的接口協調工作;橋接模式目的是抽象和實現分離,實現的改變不影響抽象,抽象的變化不影響實現,可以有效的應對具體業務的變化,以及業務實現的橫向擴展。

二、橋接模式

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.pswp.cn/diannao/39707.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39707.shtml
英文地址,請注明出處:http://en.pswp.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;如區塊鏈項目中的區塊顯示交易地址時就可以用到…