JAVA設計模式——(三)橋接模式

JAVA設計模式——(三)橋接模式(Bridge Pattern)

  • 介紹
  • 理解
  • 實現
    • 武器抽象類
    • 武器實現類
    • 涂裝顏色的行為接口
    • 具體顏色的行為實現
    • 讓行為影響武器
      • 修改武器抽象類
      • 修改實現類
    • 測試
  • 適用性

介紹

將抽象和實現解耦,使兩者可以獨立的變化。

理解

在這里需要理解的是如何讓抽象和實現進行解耦。再具體編碼代碼時,抽象類一般用以定義一些對象的公共基類,公共基類包含一些共同屬性或者一些通用實現方法,或者一些子類待實現的方法;接口則用于規范實現類的行為方法。

對于一個武器(實現類),制作一把武器需要模具(抽象類),假如我們需要拓展武器,讓武器可以組裝其他的組件,比如彈夾、槍管,那我們是否需要重新打造一個模具(抽象類),那這樣做豈不是每次的改動都需要更改模具,讓工作變得繁重。所以,有沒有一種辦法直接對實現類修改,有的。

直接修改實現類,我們可以直接更換槍管、更換彈夾等行為,即對實現類的直接修改(工作臺一樣)。這樣就直接避免修改抽象類,轉而通過工作臺修改(即定義其他的行為)。

實現

武器抽象類

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 15:59* @Contact 643947568@qq.com*/
public abstract class AbstractWeapon {public abstract void createWeapon();}

武器實現類

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:01* @Contact 643947568@qq.com*/
public class Weapon extends AbstractWeapon{@Overridepublic void createWeapon() {System.out.println("生產具有八倍鏡的武器");}
}

涂裝顏色的行為接口

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:07* @Contact 643947568@qq.com*/
public interface Color {public void getColor(); //繪制槍的顏色
}

具體顏色的行為實現

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:11* @Contact 643947568@qq.com*/
public class Green implements Color {@Overridepublic void getColor() {return "綠色";}
}

讓行為影響武器

如何讓行為影響武器,是值得思考的問題。為了讓武器的顏色得到改變,一種方法武器和顏色傳送給Color類涂裝,另一種是將定義的顏色傳給武器進行涂裝。

當然,選擇第二種是更好的。由于顏色是預先定義的,而不是根據顏色需求來定制顏色。另外,武器的組裝線在武器類里面,難道你會把武器送給顏料廠進行涂裝嗎?肯定不會吧。

修改武器抽象類

讓武器類具有顏色屬性

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 15:59* @Contact 643947568@qq.com*/
public abstract class AbstractWeapon {Color color;public AbstractWeapon(Color color) {this.color = color;}public abstract void createWeapon();}

修改實現類

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 16:01* @Contact 643947568@qq.com*/
public class Weapon extends AbstractWeapon {public Weapon(Color color) {super(color);}@Overridepublic void createWeapon() {System.out.println("生產具有八倍鏡的武器");System.out.println("涂裝顏色" + color.getColor());}
}

測試

package cn.sh.designepattern.example02;/*** @Author song* @Version 0.0.1* @Date 2025/4/23 15:59* @Contact 643947568@qq.com*/
public class Main {public static void main(String[] args) {Color green = new Green();  //定義顏色Weapon weapon = new Weapon(green);  //將顏色傳給武器weapon.createWeapon();}
}

適用性

進過上面的例子,因該很好理解橋接模式的運用。

橋接模式更偏向運用組合的方式,將實現細節從本體中抽離出來,從而將顏色的實現細節從武器的生產線抽離,而無需
關心其中部分的實現,只需要得到這部分的屬性即可。

如果我們直接采用實現的方式,讓武器具有顏色的行為,就好比把武器組裝線中,塞一個顏色的加工廠一樣,臃腫,也沒有解耦合。此外,直接實現Color接口的方式,會使得每次顏色類的變動,均會影響實現的子類,均需要重寫接口的抽象方法。

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

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

相關文章

k8s 證書相關問題

1.重新生成新證書 kubeadm init phase certs apiserver-etcd-client --config ~/kubeadm.yaml這個命令表示生成 kube-apiserver 連接 etcd 使用的證書,生成后如下 -rw------- 1 root root 1.7K Apr 23 16:35 apiserver-etcd-client.key -rw-r--r-- 1 root root 1.2K Apr 23 …

比較:AWS VPC peering與 AWS Transit Gateway

簡述: VPC 對等連接和 Transit Gateway 用于連接多個 VPC。VPC 對等連接提供全網狀架構,而 Transit Gateway 提供中心輻射型架構。Transit Gateway 提供大規模 VPC 連接,并簡化了 VPC 間通信管理,相比 VPC 對等連接,支持大量 VPC 的 VPC 間通信管理。 VPC 對等連接 AWS V…

制造企業PLM深度應用:2025年基于PDCA循環的7項持續改進指標

制造企業的產品生命周期管理(PLM)在數字化轉型的浪潮中扮演著至關重要的角色。PLM深度應用不僅能夠提升產品研發效率、保證產品質量,還能增強企業在市場中的競爭力。隨著2025年智能制造目標的推進,基于PDCA循環的持續改進對于PLM的…

極狐GitLab 的壓縮和合并是什么?

極狐GitLab 是 GitLab 在中國的發行版,關于中文參考文檔和資料有: 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 壓縮和合并 (BASIC ALL) 在你處理一個特性分支時,通常會創建一些小的、獨立的提交。這些小提交幫助描述構建特性…

解耦舊系統的利器:Java 中的適配器模式(Adapter Pattern)實戰解析

在現代軟件開發中,我們經常需要與舊系統、第三方庫或不一致接口打交道。這時候,如果能優雅地整合這些不兼容組件,又不破壞原有結構,就需要一位“翻譯官” —— 適配器模式。本文將通過 Java 實例,詳細講解適配器模式的…

03-谷粒商城筆記

一個插件的install和生命周期的報錯是不一樣的 Maven找不到ojdbc6和sqljdbc4依賴包 這時候我找到了jar包,然后我就先找到一個jar安裝到了本地倉庫。 在終端上進行命令了: mvn install:install-file -DfileD:\ojdbc6-11.2.0.4.jar -DgroupIdcom.oracle …

黑馬點評redis改 part 5

達人探店 發布探店筆記 那第一張表block表它里邊的結構呢是這個 首先呢第一個字段是i d,就是主鍵,第二個呢是shop id,就是商戶你發的這個比例啊,它是跟哪個商戶有關系的。第三個呢用戶id就是誰發的這篇筆記,第四個呢標…

【PCB工藝】運放電路中的負反饋機制

通過運算方法器電路設計詳細解釋負反饋機制(Negative Feedback) 負反饋 是控制系統、電子電路、神經系統等多個領域中非常核心的概念。特別在運算放大器(Op-Amp)電路中,負反饋是實現精確控制和高穩定性的關鍵機制。 …

聲紋振動傳感器在電力監測領域的應用

聲紋振動傳感器在電力監測領域有多種應用,主要包括以下幾個方面: 變壓器監測 故障診斷:變壓器在運行過程中會產生特定的聲紋和振動信號,當變壓器內部出現故障,如繞組短路、鐵芯松動、局部放電等,其聲紋和振…

7、sentinel

控制臺訪問地址&#xff1a;http://localhost:8080/ 依賴 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>配置文件 spring:cloud:sentinel:transpo…

線程封裝

目錄 makefile Thread.hpp main.cc 以面向對象的方式造輪子 #ifndef _THREAD_HPP__ // 如果沒有定義過 _THREAD_HPP__ #define _THREAD_HPP__ // 則定義 _THREAD_HPP__// 這里是頭文件的實際內容&#xff08;類、函數聲明等&#xff09;#endif // 結束條件…

【maven-7.1】POM文件中的屬性管理:提升構建靈活性與可維護性

在Maven項目中&#xff0c;POM (Project Object Model) 文件是核心配置文件&#xff0c;而屬性管理則是POM中一個強大但常被低估的特性。良好的屬性管理可以顯著提升項目的可維護性、減少重復配置&#xff0c;并使構建過程更加靈活。本文將深入探討Maven中的屬性管理機制。 1.…

極狐GitLab 的合并請求部件能干什么?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 合并請求部件 (BASIC ALL) 合并請求的 概述 頁面顯示了來自服務的狀態更新&#xff0c;這些服務會對您的合并請求執行操作。…

26、C# 中是否可以繼承String類?為什么?

在 C# 中&#xff0c;不能直接繼承 String 類&#xff08;System.String&#xff09;。這是由于以下幾個原因&#xff1a; 1、String 類是 sealed 的 String 類在 .NET 中被標記為 sealed&#xff0c;這意味著它是一個密封類&#xff0c;不能被繼承。 sealed 關鍵字的作用是防…

deeplab語義分割訓練自定數據集

鏈接&#xff1a;https://pan.baidu.com/s/1KkkM1rLfyiMPtYLycpnxmg?pwdj2rd 提取碼&#xff1a;j2rd --來自百度網盤超級會員V2的分享 采用數據集&#xff1a; https://aistudio.baidu.com/datasetdetail/130647 采用代碼&#xff1a; https://github.com/jfzhang95/pyt…

【Pandas】pandas DataFrame mod

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于執行 DataFrame 與另一個對象&#xff08;如 DataFrame、Series 或標量&#xff09;的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于執行 DataFrame 與另一個對象&…

12、高階組件:魔法增幅器——React 19 HOC模式

一、魔法增幅器的本質 "高階組件是魔法師用咒語疊加的煉金術&#xff0c;"霍格沃茨魔咒研究院院長凝視著發光的增幅器&#xff0c;"通過函數式能量場的嵌套&#xff0c;讓基礎組件獲得預言家日報式的邏輯繼承&#xff01;" ——以神秘事務司的「維度疊加理…

Qt creator 16.0.1 語言家失效解決方法

一、在菜單“工具-->外部”里面沒有語言家、更新翻譯、發布翻譯工具。 二、解決方法 手工添加 1、添加目錄 2、添加工具 更新翻譯 (lupdate) %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate %{CurrentDocument:Project:FilePath} %{CurrentDocument:Project:Path}…

Apple AirTag定位原理

AirTag 是蘋果公司推出的一款用于追蹤物品的設備&#xff0c;觸及到我的知識盲區。所以特地記錄一下技術原理。其工作所用的技術原理主要涉及以下幾個方面&#xff1a; 藍牙技術&#xff1a;AirTag 使用藍牙低功耗技術&#xff08;BLE&#xff09;與用戶的 iPhone 或其他蘋果設…

計算機網絡 實驗五 RIP的配置與應用

摘要 本實驗基于華為eNSP平臺構建多路由器網絡拓撲&#xff0c;旨在通過實戰掌握路由器配置、RIP協議部署及網絡故障排查等核心技能。實驗分為拓撲設計、設備初始化、協議配置、連通性測試四個階段&#xff0c;重點研究RIPv2版本特性及自動匯總抑制機制。 在配置過程中&#…