23種設計模式-結構型模式之橋接模式(Java版本)

Java 橋接模式(Bridge Pattern)詳解

🌉 什么是橋接模式?

橋接模式用于將抽象部分與實現部分分離,使它們可以獨立變化。
通過在兩個獨立變化的維度之間建立“橋”,避免因多維度擴展導致的類爆炸。


🧠 使用場景

  • 系統需要在多個維度進行擴展
  • 想解耦抽象和實現,讓它們各自獨立發展
  • 減少子類的數量,避免類爆炸

🏗? 模式結構

  • Abstraction(抽象類):定義高層接口,持有 Implementor 引用
  • RefinedAbstraction(擴充抽象類):擴展抽象定義
  • Implementor(實現接口):定義底層實現接口
  • ConcreteImplementor(具體實現):提供具體實現

? 示例:不同品牌的電視遠程控制

實現接口(Implementor)

public interface TV {void on();void off();void tuneChannel(int channel);
}

具體實現(ConcreteImplementor)

public class SonyTV implements TV {public void on() { System.out.println("Sony TV is ON"); }public void off() { System.out.println("Sony TV is OFF"); }public void tuneChannel(int channel) { System.out.println("Sony TV tuned to channel " + channel); }
}public class SamsungTV implements TV {public void on() { System.out.println("Samsung TV is ON"); }public void off() { System.out.println("Samsung TV is OFF"); }public void tuneChannel(int channel) { System.out.println("Samsung TV tuned to channel " + channel); }
}

抽象類(Abstraction)

public abstract class RemoteControl {protected TV implementor;public RemoteControl(TV implementor) { this.implementor = implementor; }public abstract void on();public abstract void off();
}

擴充抽象類(RefinedAbstraction)

public class AdvancedRemoteControl extends RemoteControl {public AdvancedRemoteControl(TV implementor) {super(implementor);}@Overridepublic void on() {implementor.on();}@Overridepublic void off() {implementor.off();}public void setChannel(int channel) {implementor.tuneChannel(channel);}
}

客戶端調用

public class Client {public static void main(String[] args) {TV sony = new SonyTV();RemoteControl remote = new AdvancedRemoteControl(sony);remote.on();((AdvancedRemoteControl) remote).setChannel(5);remote.off();TV samsung = new SamsungTV();remote = new AdvancedRemoteControl(samsung);remote.on();((AdvancedRemoteControl) remote).setChannel(10);remote.off();}
}

🧩 優點

  • 分離抽象與實現,減少耦合
  • 提高可擴展性,各自獨立改變
  • 減少子類數量

?? 缺點

  • 增加系統復雜度,結構較多
  • 初期設計需仔細分析抽象層次

? 使用建議

當系統在多個維度上擴展時,且希望解耦抽象和實現,避免類爆炸,使用橋接模式是理想選擇。

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

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

相關文章

基于SIMMECHANICS的單自由度磁懸浮隔振器PID控制系統simulink建模與仿真

目錄 1.課題概述 2.系統仿真結果 3.核心程序與模型 4.系統原理簡介 4.1 單自由度磁懸浮減振器工作原理簡介 4.2 SIMMECHANICS工具箱 5.完整工程文件 1.課題概述 基于SIMMECHANICS的單自由度磁懸浮隔振器PID控制系統simulink建模與仿真。其中,SIMMECHANICS是M…

contenthash 持久化緩存

以下是關于持久化緩存(contenthash)的深度技術解析,涵蓋原理、配置策略及最佳實踐,幫助我們構建高性能前端應用的緩存體系: 一、緩存機制核心原理 1. 瀏覽器緩存決策矩陣 觸發條件緩存行為對應場景URL 未變化 + 強緩存有效直接讀取磁盤/內存緩存未修改的靜態資源URL 變化…

【前端記事】關于electron的入門使用

electron入門使用 背景how to start第一步 創建一個vite-vue3項目第二步 裝各種依賴第三步 配置vite.config.jspackage.jsonelectron入口 啟動重寫關閉、隱藏、最大化最小化 背景 最近對electron比較感興趣,折騰一段時間后有了點眉目,記錄一下 how to …

跨瀏覽器音頻錄制:實現兼容的音頻捕獲與WAV格式生成

在現代Web開發中,音頻錄制功能越來越受到開發者的關注。無論是在線會議、語音識別還是簡單的語音留言,音頻錄制都是一個重要的功能。然而,實現一個跨瀏覽器的音頻錄制功能并非易事,因為不同瀏覽器對音頻錄制API的支持存在差異。本…

Semantic Kernel也能充當MCP Client

背景 筆者之前,分別寫過兩篇關于Semantic Kernel(下簡稱SK)相關的博客,最近模型上下文協議(下稱MCP)大火,實際上了解過SK的小伙伴,一看到 MCP的一些具體呈現,會發現&…

識別圖片內容OCR并重命名文件

在工作場景中,經常出現通過拍攝設備獲取圖片后,未及時進行有效命名的情況。這些圖片中往往包含關鍵信息(如合同編號、產品型號、日期等),需要人工識別并命名,存在以下痛點: 效率低下&#xff1…

【防火墻 pfsense】3 portal

(1)應該考慮的問題: ->HTTPS 連接的干擾問題:HTTPS 是一種旨在防止惡意第三方截取和篡改流量的協議。但強制門戶的工作原理是截取并改變終端用戶與網絡之間的連接。這對于 HTTP 流量來說不是問題,但使用 HTTPS 加密…

銀發科技:AI健康小屋如何破解老齡化困局

隨著全球人口老齡化程度的不斷加深,如何保障老年人的健康、提升他們的生活質量,成為了社會各界關注的焦點。 在這場應對老齡化挑戰的戰役中,智紳科技順勢而生,七彩喜智慧養老系統構筑居家養老安全網。 而AI健康小屋作為一項創新…

TCP協議理解

文章目錄 TCP協議理解理論基礎TCP首部結構圖示字段逐項解析 TCP是面向連接(Connection-Oriented)面向連接的核心表現TCP 面向連接的核心特性TCP 與UDP對比 TCP是一個可靠的(reliable)序號與確認機制(Sequencing & Acknowledgment&#xf…

什么是機器視覺3D碰撞檢測?機器視覺3D碰撞檢測是機器視覺3D智能系統中安全運行的核心技術之一

機器視覺3D碰撞檢測是一種結合計算機視覺和三維空間分析的技術,旨在檢測三維場景中物體之間是否發生碰撞(即物理接觸或交疊)。它通過分析物體的形狀、位置、運動軌跡等信息,預測或實時判斷物體間的碰撞可能性。以下是其核心要點: 基本原理 三維感知:利用深度相機(如RGB-…

nacos設置權重進行負載均衡不生效

nacos設置權重進行負載均衡不生效,必須在啟動類下加上這個bean Beanpublic IRule nacosRule(){return new NacosRule();}如下圖所示

創建 Node.js Playwright 項目:從零開始搭建自動化測試環境

一、環境準備 在開始創建 Playwright 項目之前,確保你的電腦上已經安裝了以下工具: Node.js:Playwright 依賴于 Node.js 環境,確保你已經安裝了最新版本的 Node.js。可以通過以下命令檢查是否安裝成功: node -v npm -…

日語學習-日語知識點小記-構建基礎-JLPT-N4階段(11): てあります。

日語學習-日語知識點小記-構建基礎-JLPT-N4階段(11): てあります。 1、前言(1)情況說明(2)工程師的信仰 2、知識點(1)てあります。(2)…

【金倉數據庫征文】- 深耕國產數據庫優化,筑牢用戶體驗新高度

目錄 引言 一、性能優化:突破數據處理極限,提升運行效率 1.1 智能查詢優化器:精準優化數據檢索路徑 1.2 并行處理技術:充分釋放多核計算潛力 1.3 智能緩存機制:加速數據訪問速度 二、穩定性提升:筑牢…

Java代理講解

代理 代理模式是一種結構型設計模式,它允許我們通過添加一個代理對象來控制對另一個對象的訪問。代理對象和實際對象具有相同的接口,使得客戶端在不知情的情況下可以使用代理對象進行操作。代理對象在與客戶端進行交互時,可以控制對實際對象…

利用deepseek快速生成甘特圖

一、什么是甘特圖 甘特圖(Gantt Chart)是一種直觀的項目管理工具,廣泛應用于多個領域,主要用于??時間規劃、任務分配和進度跟蹤??。 直觀性??:時間軸清晰展示任務重疊或延遲。 ??靈活性??:支持…

從零開始學習SLAM|技術路線

概念 視覺SLAM(Simultaneous Localization and Mapping)系統中,整個過程通常分為 前端 和 后端 兩個主要部分。前端處理的是從傳感器數據(如相機圖像、激光雷達等)中提取和處理信息,用于實時定位和建圖&am…

LeetCode 解題思路 44(Hot 100)

解題思路: dp 數組的含義: 以 nums[i] 為結尾的最長遞增子序列的長度。遞推公式: dp[i] Math.max(dp[i], dp[j] 1)。dp 數組初始化: dp[i] 1。遍歷順序: 從小到大去遍歷,從 i 1 開始,直到 …

精益數據分析(22/126):解鎖創業增長密碼與長漏斗分析

精益數據分析(22/126):解鎖創業增長密碼與長漏斗分析 在創業與數據分析的探索旅程中,我們都在不斷尋求新的知識和方法,以提升創業的成功率。我一直期望能和大家共同學習、共同進步,今天就讓我們繼續深入研…

大模型應用開發之LLM入門

一、大模型概述 1、大模型概念 LLM是指用有大量參數的大型預訓練語言模型,在解決各種自然語言處理任務方面表現出強大的能力,甚至可以展現出一些小規模語言模型所不具備的特殊能力 2、語言模型language model 語言建模旨在對詞序列的生成概率進行建模…