Python設計模式 - 橋接模式

定義

橋接模式是一種結構型設計模式,它的核心思想是將抽象部分與實現部分分離,使它們可以獨立變化。

結構

在這里插入圖片描述

  • 抽象類(Abstraction):定義抽象接口,持有實現部分的引用。
  • 具體抽象類(Refined Abstraction):擴展抽象接口。
  • 實現類(Implementor):定義實現部分的接口,通常是一些基礎操作。
  • 具體實現類(Concrete Implementor):提供實現類接口的具體實現。

通常,抽象部分是面向高層業務邏輯的,而實現部分則關注底層細節。因此一般會將與業務方法關系更密切的維度設計為抽象部分。

應用場景

  1. 跨平臺 GUI 組件:當 GUI 組件需要在多個操作系統上運行且渲染方式不同時,使用橋接模式解耦 UI 組件與平臺渲染邏輯。
  2. 圖形繪制引擎:當應用程序需要支持不同的圖形繪制庫(如 OpenGL、DirectX),使用橋接模式解耦圖形形狀與具體的繪制引擎。

優缺點

優點:

  1. 解耦抽象與實現,提高代碼靈活性:使抽象部分和實現部分可以獨立擴展,避免二者強耦合,提高系統的靈活性。
  2. 擴展性強,符合開閉原則:新增抽象部分或實現部分時,無需修改現有代碼,只需添加新的具體抽象類或具體實現類即可,提高了系統的可擴展性,并且符合開閉原則。
  3. 減少子類數量:通過動態組合代替繼承,降低類的數量,減少復雜度,提升可維護性。

缺點:

  1. 對客戶端不夠友好:客戶端需要理解抽象部分與實現部分的組合方式,相比直接使用繼承,增加了使用和理解的復雜度。

代碼示例

from abc import ABC, abstractmethod# 實現部分:消息發送方式(短信、郵件)
class MessageSender(ABC):@abstractmethoddef send(self, message: str):passclass SMSMessageSender(MessageSender):def send(self, message: str):print(f"【短信發送】{message}")class EmailMessageSender(MessageSender):def send(self, message: str):print(f"【郵件發送】{message}")# 抽象部分:消息類型(普通消息、加急消息)
class Message(ABC):def __init__(self, sender: MessageSender):self.sender = sender  # 通過組合方式使用消息發送方式@abstractmethoddef send(self, content: str):passclass CommonMessage(Message):def send(self, content: str):print("【普通消息】處理中...")self.sender.send(content)class UrgentMessage(Message):def send(self, content: str):print("【加急消息】需要立即處理!")self.sender.send(f"【加急】{content}")# 客戶端代碼
if __name__ == "__main__":# 選擇短信方式發送普通消息sms_sender = SMSMessageSender()common_msg = CommonMessage(sms_sender)common_msg.send("會議將在下午3點舉行")# 選擇郵件方式發送加急消息email_sender = EmailMessageSender()urgent_msg = UrgentMessage(email_sender)urgent_msg.send("服務器異常,請立即檢查!")

參考

《設計模式的藝術》

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

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

相關文章

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 用戶注冊實現

大家好,我是java1234_小鋒老師,最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程,持續更新中,計劃月底更新完,感謝支持。今天講解用戶注冊實現 視頻在線地址: …

華為7月23日機考真題

📌 點擊直達筆試專欄 👉《大廠筆試突圍》 💻 春秋招筆試突圍在線OJ 筆試突圍OJ](bishipass.com) 03. 山峰觀測站數據分析 問題描述 LYA是一名地理數據分析師,負責分析山峰觀測站收集的海拔高度數據。觀測站在一條直線上設置了…

圖像分析學習筆記(4):機器學習圖像特征與描述

圖像分析學習筆記(4):機器學習圖像特征與描述深度學習基礎深度學習技巧深度模型構建深度學習基礎 深度學習概念:深度學習是機器學習的一個分支,它基于一系列算法,試圖通過使用多個處理層建立數據的高級抽象…

鎖付機器人,如何精準鎖附革新新能源鋰電裝配效率

其實呢,隨著科技的不斷發展,新能源電池、智能制造、精密裝配、工藝升級以及工業自動化這些領域都在飛速前進。新能源行業如今可是炙手可熱,中國新能源行業進入快速發展階段,就像一列高速行駛的火車,勢不可擋。在這個過…

Vue項目開發注意事項(包含node/npm/cnpm等)

事項一:項目代碼放在本地怎么運行起來 1、首先確定項目對應的node和npm版本 node下載地址 Index of /dist/https://nodejs.org/dist/ node 與 npm版本對應關系 Node.js — Node.js Releases 2、node卸載的時候,會自動把對應的npm卸載掉 情況1&…

GitHub:只支持 Git 作為唯一的版本庫格式進行托管

🤍 前端開發工程師、技術日更博主、已過CET6 🍨 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 🕠 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 🍚 藍橋云課簽約作者、…

秋招Day17 - Spring - MVC

Spring MVC有哪些核心組件?DispatcherServlet:前端控制器,所有HTTP請求首先經過它,分發請求到正確的處理器,并與其他組件協調。HandlerMapping:維護URL和處理器的映射關系Handler:處理器&#x…

使用mybatis實現模糊查詢和精準查詢切換的功能

1、首先在前端頁面添加勾選框&#xff08;name設置為check&#xff09;2、mybatis代碼當check勾選時&#xff0c;check不為null&#xff0c;走模糊查詢like當check未勾選時&#xff0c;check為null&#xff0c;走精準查詢 <if test"check ! null and check ! "&g…

Android模塊化實現方案深度分析

模塊化是現代 Android 開發應對項目復雜度激增、團隊協作效率、編譯速度瓶頸、功能復用與動態化等挑戰的核心架構思想。其核心目標是高內聚、低耦合、可插拔、易維護。 一、模塊化的核心價值與目標 降低復雜度&#xff1a; 將龐大單體應用拆分為獨立、職責清晰的模塊。加速編譯…

網絡基礎16--VRRP技術

一、VRRP核心概念定義虛擬路由器冗余協議&#xff08;VRRP&#xff0c;Virtual Router Redundancy Protocol&#xff09;&#xff0c;可以將多個路由器加入到備份組中&#xff0c;形成一臺虛擬路由器&#xff0c;承擔網關功能。RFC 3768標準定義的VRRP是一種容錯協議&#xff0…

最長公共前綴-leetcode

編寫一個函數來查找字符串數組中的最長公共前綴。 如果不存在公共前綴&#xff0c;返回空字符串 “”。 示例 1&#xff1a; 輸入&#xff1a;strs [“flower”,“flow”,“flight”] 輸出&#xff1a;“fl” 示例 2&#xff1a; 輸入&#xff1a;strs [“dog”,“racecar”,…

vs2022:C++安裝opencv

vs2022:C安裝opencv https://opencv.org/releases/ 1.配置包含目錄 2.配置庫目錄 3.配置連接器 4.配置環境變量 5.重新啟動VS2015/VS2017 6.測試 1.配置包含目錄 (頭文件) 2.配置庫目錄&#xff08;dll存放的庫目錄&#xff09; 3.配置連接器(庫) 4.配置環境變量 5.重新啟動VS…

智聯智造:國內新能源汽車品牌AGV小車無線控制系統創新實踐

行業背景&#xff1a;智能制造浪潮下的通信剛需 在全球制造業智能化轉型浪潮中&#xff0c;工業4.0技術已成為提升生產效率與產品質量的核心驅動力。國內某新能源汽車品牌作為智能制造的標桿企業&#xff0c;積極投身自動化設備與智能生產系統的革新。其中&#xff0c;無線控制…

QT6 源,七章對話框與多窗體(8) 消息對話框 QMessageBox :屬性,信號函數,成員函數,以及靜態成員函數,源代碼帶注釋

&#xff08;1&#xff09;消息對話框里&#xff0c;分為通知消息&#xff0c;詢問消息&#xff0c;提醒消息&#xff0c;錯誤消息。可以直接使用本類的靜態函數&#xff0c;簡單。但 QT 的官方說明里&#xff0c;建議使用動態成員函數組件的消息框&#xff0c;而非使用靜態函數…

DAY 7|算法篇——棧與隊列(及重溫數組篇章有感)

今天本來應該寫兩道題把這一章節結束掉&#xff0c;奈何第二題前k個高頻元素需要用的二叉樹相關代碼實在不會寫&#xff08;倒是能看懂&#xff09;等我學完二叉樹再把這道題親自寫一遍吧 今天工作量比較小&#xff0c;準備從第一天的任務開始把題目重新再做一遍 239. 滑動窗…

go語言基礎與進階

&#x1f680; Go語言終極高手之路&#xff1a;從基礎到架構的終極指南 Go語言&#xff0c;以其簡潔的語法、卓越的性能和原生的并發模型&#xff0c;席卷了云原生和后端開發領域。然而&#xff0c;要真正駕馭Go&#xff0c;僅僅停留在會寫if-else和for循環是遠遠不夠的。真正的…

Oracle數據恢復—Oracle數據庫所在分區被刪除后報錯的數據恢復案例

Oracle數據庫數據恢復環境&故障&#xff1a; 一臺服務器上一個分區存放Oracle數據庫數據。由于管理員誤操作不小心刪除了該分區&#xff0c;數據庫報錯&#xff0c;無法使用。 北亞企安數據恢復工程師到達現場后&#xff0c;將故障服務器中所有硬盤以只讀方式進行完整鏡像。…

Prometheus+altermanager搭配釘釘報警

一、Prometheus介紹 Prometheus是一個開源系統監控和警報工具包&#xff0c;最初在 SoundCloud構建。自 2012 年成立以來&#xff0c;許多公司和組織都采用了 Prometheus&#xff0c;該項目擁有非常活躍的開發者和用戶社區。它現在是一個獨立的開源項目&#xff0c;獨立于任何…

【小白量化智能體】應用6:根據通達信指標等生成機器學習Python程序

【小白量化智能體】應用6&#xff1a;根據通達信指標等生成機器學習Python程序 【小白量化智能體】是指能夠自主或半自主地通過與環境的交互來實現目標或任務的計算實體。智能體技術是一個百科全書&#xff0c;又融合了人工智能、計算機科學、心理學和經濟學等多個領域的知識&a…

k8s的calico無法啟動報錯解決

報錯信息[INFO][1] main.go 138: Failed to initialize datastore errorGet "https://10.245.0.1:443/apis/crd.projectcalico.org/v1/clusterinformations/default": dial tcp 10.245.0.1:443: connect: no route to host 2025-07-21 06:15:42.055 [FATAL][1] main.…