c++注意點(15)----設計模式(橋接模式與適配器模式)

一、結構型設計模式

兩者有點相似,都是為了做到解耦的功能。

適配器模式是一種結構型設計模式,?它能使接口不兼容的對象能夠相互合作。

橋接模式是一種結構型設計模式,?可將一個大類或一系列緊密相關的類拆分為抽象和實現兩個獨立的層次結構,?從而能在開發時分別使用。

二、適配器模式的實際項目案例

1. 串口設備驅動適配
  • 場景:舊設備的串口驅動函數為uart_send_byte(uint8_t data),新系統統一要求serial_transmit(uint8_t* buf, uint16_t len)接口。
  • 適配方式:編寫適配器函數,將serial_transmit轉換為對uart_send_byte的循環調用。
  • 作用:新系統無需修改即可兼容舊設備驅動。
2. 第三方庫集成(如日志庫)
  • 場景:項目原有日志接口為log_info(const char* msg),引入的第三方庫日志函數為third_party_log(int level, const char* format, ...)
  • 適配方式:實現適配器log_info,內部調用third_party_log(INFO_LEVEL, "%s", msg)
  • 作用:項目代碼無需修改,即可使用第三方日志庫。

三、橋接模式的實際項目案例

1. LVGL(嵌入式 GUI 庫)
  • 抽象層:控件邏輯(按鈕、標簽、列表等渲染規則、事件處理)。
  • 實現層:硬件接口(顯示屏刷新disp_drv.flush、觸摸輸入indev_drv.read)。
  • 橋接方式:通過驅動結構體(lv_disp_drv_t)中的函數指針關聯抽象層與實現層。
  • 作用:同一套 UI 邏輯可適配不同顯示屏(OLED/LCD)和硬件平臺(STM32/ESP32),新增硬件只需實現底層接口,無需修改 UI 邏輯。

四、一句話總結

  • 橋接模式是 “未雨綢繆”:在設計初期就分離可能變化的維度,讓系統更靈活地應對未來擴展。
  • 適配器模式是 “亡羊補牢”:在系統集成時解決已有組件的接口沖突,讓不兼容的代碼協同工作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918362.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918362.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918362.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DuoPlus支持導入文件批量配置云手機參數,還優化了批量操作和搜索功能!

作為我常用的一款還不錯的跨境工具,DuoPlus云手機幫我高效完成了很多跨境工作,它的功能也在逐步完善和優化,今天來聊聊它最近新更新的一些功能。功能更新一覽新增導入文件配置參數:批量初始化代理、批量修改參數支持導入文件一鍵配…

PLC如何實現通過MQTT協議物聯網網關接入管理云平臺

在工業4.0與智能制造浪潮下,企業亟需實現設備數據的高效采集與云端協同,以支撐遠程監控、預測性維護等場景。工業智能網關憑借其強大的協議解析能力、邊緣計算功能及安全傳輸機制,成為PLC接入云平臺的核心解決方案。本文將從技術架構、功能模…

通過sealos工具在ubuntu 24.02上安裝k8s集群

一、系統準備(1)安裝openssh服務 sudo apt install openssh-server sudo systemctl start ssh sudo systemctl enable ssh(2)放通防火墻 sudo ufw allow ssh(3)開通root直接登錄 vim /etc/ssh/sshd_config#…

nginx+Lua環境集成、nginx+Lua應用

nginxluaredis實踐 概述 nginx、lua訪問redis的三種方式: 1。 HttpRedis模塊。 指令少,功能單一 ,適合簡單的緩存。只支持get 、select命令。 2。 HttpRedis2Module模塊。 功能強大,比較靈活。 3。 lua-resty-redis庫 OpenResty。…

機器學習 K-Means聚類 無監督學習

目錄 K-Means 聚類:從原理到實踐的完整指南 什么是 K-Means 聚類? 應用場景舉例 K-Means 算法的核心原理 K-Means 算法的步驟詳解 可視化理解 K-Means 的優缺點分析 優點 缺點 如何選擇合適的 K 值? 1. 肘部法(Elbow Me…

RabbitMQ面試精講 Day 16:生產者優化策略與實踐

【RabbitMQ面試精講 Day 16】生產者優化策略與實踐 開篇 歡迎來到"RabbitMQ面試精講"系列第16天,今天我們聚焦RabbitMQ生產者優化策略與實踐。在消息隊列系統中,生產者的性能表現直接影響整個系統的吞吐量和可靠性。掌握生產者優化技巧不僅能…

Android 系統的安全 和 三星安全的區別

維度Android(AOSP 通用)Samsung(Knox 強化)本質差異一句話信任根標準 Verified Boot(公鑰由谷歌或 OEM 托管)額外在 自家 SoC 里燒錄 Knox 密鑰 熔絲位,一旦解鎖即觸發 Knox 0x1 熔斷&#xff…

開源大模型實戰:GPT-OSS本地部署與全面測評

文章目錄一、引言二、安裝Ollama三、Linux部署GPT-OSS-20B模型四、模型測試4.1 AI幻覺檢測題題目1:虛假歷史事件題目2:不存在的科學概念題目3:虛構的地理信息題目4:錯誤的數學常識題目5:虛假的生物學事實4.2 算法題測試…

【無標題】命名管道(Named Pipe)是一種在操作系統中用于**進程間通信(IPC)** 的機制

命名管道(Named Pipe)是一種在操作系統中用于進程間通信(IPC) 的機制,它允許不相關的進程(甚至不同用戶的進程)通過一個可見的文件系統路徑進行數據交換。與匿名管道(僅存在于內存&a…

Baumer相機如何通過YoloV8深度學習模型實現危險區域人員的實時檢測識別(C#代碼UI界面版)

《------往期經典推薦------》 AI應用軟件開發實戰專欄【鏈接】 序號 項目名稱 項目名稱 1 1.工業相機 + YOLOv8 實現人物檢測識別:(C#代碼,UI界面版) 2.工業相機 + YOLOv8 實現PCB的缺陷檢測:(C#代碼,UI界面版) 2 3.工業相機 + YOLOv8 實現動物分類識別:(C#代碼,U…

本文章分享一個本地錄音和實時傳輸錄音給app的功能(杰理)

我用的是杰理手表sdk,該功能學會就可自行在任何杰里sdk上做,庫函數大致一樣,學會運用這個方向就好。1.我們要驗證這個喇叭和麥是否正常最簡單的的辦法,就是直接萬用表測試,直接接正負極,看看是否通路&#…

Netty-Rest搭建筆記

0.相關知識Component、Repository、ServiceRepository //Scope設置bean的作用范圍 Scope("singleton")//單例 prototype每次創建都會給一個新實例。 public class BookDaoImpl implements BookDao { //生命周期public void save() {System.out.println("book d…

工作筆記-----lwip網絡任務初始化問題排查

工作筆記-----基于FreeRTOS的lwIP網絡任務初始化問題排查 Author:明月清了個風Date: 2025/8/10PS:新項目中在STMF7開發板上基于freeRTOS和lwIP開發網口相關任務,開發過程中遇到了網口無法連接的問題,進行了一系列的排查…

Kotlin動態代理池+無頭瀏覽器協程化實戰

我看到了很多作者展示了Kotlin在爬蟲領域的各種高級用法。我需要從中提取出最"牛叉"的操作,也就是那些充分利用Kotlin語言特性,使爬蟲開發更高效、更強大的技巧。 我準備用幾個主要部分來組織內容,每個部分會突出Kotlin特有的"…

PDF編輯工具,免費OCR識別表單

軟件介紹 今天推薦一款功能全面的PDF編輯工具——PDF XChange Editor,支持文本、圖片編輯及OCR識別,還能一鍵提取表單信息,滿足多樣化PDF處理需求。 軟件優勢 該軟件完全免費,下載后雙擊圖標即可直接運行,無需安裝&…

OpenEnler等Linux系統中安裝git工具的方法

在歐拉系統中安裝 Git使用 yum 包管理器安裝(推薦,適用于歐拉等基于 RPM 的系統):# 切換到 root 用戶(若當前不是) su - root# 安裝 Git yum install -y git驗證安裝是否成功:git --version若輸…

UE5 第三人稱視角如何設置camera移動旋轉

“奇怪,這blog不支持md格式嗎”## 第1步:設置玩家Pawn 創建一個藍圖類,繼承自 Pawn,在游戲模式(Game Mode)中,將這個Pawn設置為默認 在組件面板中,添加一個 Spring Arm 組件 在組件面…

OpenCV 入門教程:開啟計算機視覺之旅

目錄 一、引言? 二、OpenCV 簡介 ?(一)什么是 OpenCV (二)OpenCV 的特點與優勢 (三)OpenCV 的應用領域 三、環境搭建 (一)安裝 OpenCV 庫? 四、OpenCV 基礎操作 &#xf…

C++高頻知識點(十九)

文章目錄91. TCP斷開連接的時候為什么必須4次而不是3次?92. 為什么要區分用戶態和內核態?93. 說說編寫socket套接字的步驟1. 服務器端編寫步驟1.1 創建套接字1.2 綁定套接字1.3 監聽連接1.4 接受連接1.5 數據傳輸1.6 關閉套接字2. 客戶端編寫步驟2.1 創建…

一個基于 epoll 實現的多路復用 TCP 服務器程序,相比 select 和 poll 具有更高的效率

/*5 - 使用epoll實現多路復用 */ #include <stdio.h> // 標準輸入輸出函數庫 #include <stdlib.h> // 標準庫函數&#xff0c;包含exit等 #include <string.h> // 字符串處理函數 #include <unistd.h> // Unix標準函…