Java設(shè)計模式中的橋接模式
模式介紹
- 橋接模式(Bridge模式)是指:將實現(xiàn)與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變。
- 是一種結(jié)構(gòu)型設(shè)計模式。
- Bridge模式基于類的最小設(shè)計原則,通過使用封裝、聚合及繼承等行為讓不同的類承擔(dān)不同的職責(zé)。它的主要特點是把抽象(Abstraction)與行為實現(xiàn)(Implementation)分離開來,從而可以保持各部分的獨立性以及應(yīng)對他們的功能擴展。
UML類圖
類圖說明:
- Client類:橋接模式的調(diào)用者。
- 抽象類(Abstraction) :維護了Implementor /即它的實現(xiàn)類Concretelmplementor…二者是聚合關(guān)系,Abstraction充當橋接類
- RefinedAbstraction:是Abstraction 抽象類的子類
- Implementor: 行為實現(xiàn)類的接口
- ConcretelmplementorA/B :行為的具體實現(xiàn)類
- 從UML圖:這里的抽象類和接口是聚合的關(guān)系,其實調(diào)用和被調(diào)用關(guān)系
橋接模式案例
背景介紹: 客戶端通過橋接模式,根據(jù)手機功能和品牌進行相應(yīng)功能的輸出
手機品牌接口類及實現(xiàn)子類
public interface Brand { void open(); void close(); void call(); }
public class XiaoMi implements Brand { @Override public void open() { System.out.println("小米手機開機"); } @Override public void close() { System.out.println("小米手機關(guān)機"); } @Override public void call() { System.out.println("小米手機打電話"); } }
public class Vivo implements Brand{ @Override public void open() { System.out.println("Vivo手機開機"); } @Override public void close() { System.out.println("Vivo手機關(guān)機"); } @Override public void call() { System.out.println("Vivo手機打電話"); } }
手機抽象類及實現(xiàn)子類
public abstract class Phone { private Brand brand; public Phone(Brand brand) { this.brand = brand; } protected void open(){ this.brand.open(); } protected void close(){ this.brand.close(); } protected void call() { this.brand.call(); } }
public class FoldedPhone extends Phone{ public FoldedPhone(Brand brand) { super(brand); } @Override protected void open() { super.open(); System.out.println("折疊樣式手機"); } @Override protected void close() { super.close(); System.out.println("折疊樣式手機"); } @Override protected void call() { super.call(); System.out.println("折疊樣式手機"); } }
public class UpRightPhone extends Phone { public UpRightPhone(Brand brand) { super(brand); } @Override protected void open() { super.open(); System.out.println("直立樣式手機"); } @Override protected void close() { super.close(); System.out.println("直立樣式手機"); } @Override protected void call() { super.call(); System.out.println("直立樣式手機"); } }
客戶端
public class Client { public static void main(String[] args) { Phone foldedPhone = new FoldedPhone(new XiaoMi()); Phone upRightPhone = new UpRightPhone(new Vivo()); foldedPhone.close(); foldedPhone.open(); foldedPhone.call(); System.out.println("==============="); upRightPhone.close(); upRightPhone.open(); upRightPhone.call(); } }
實現(xiàn)結(jié)果:
橋接模式的注意事項和細節(jié)
- 實現(xiàn)了抽象和實現(xiàn)部分的分離,從而極大的提供了系統(tǒng)的靈活性,讓抽象部分和實現(xiàn)部分獨立開來,這有助于系統(tǒng)進行分層設(shè)計,從而產(chǎn)生更好的結(jié)構(gòu)化系統(tǒng)。
- 對于系統(tǒng)的高層部分,只需要知道抽象部分和實現(xiàn)部分的接口就可以了,其它的部分由具體業(yè)務(wù)來完成。
- 橋接模式替代多層繼承方案,可以減少子類的個數(shù),降低系統(tǒng)的管理和維護成本。
- 橋接 模式的引入增加了系統(tǒng)的理解和設(shè)計難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對抽象進行設(shè)。
- 橋接 模式要求正確識別出系統(tǒng)中兩個獨立變化的維度(抽象、和實現(xiàn)),因此其使用范圍有-定的局限性,即需要有這樣的應(yīng)用場景。
- 橋接模式其它應(yīng)用場景
對于那些不希望使用繼承或因為多層次繼承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),橋接模式尤為適用.
常見的應(yīng)用場景
- JDBC驅(qū)動程序
- 銀行轉(zhuǎn)賬系統(tǒng)
轉(zhuǎn)賬分類:網(wǎng)上轉(zhuǎn)賬,柜臺轉(zhuǎn)賬,AMT轉(zhuǎn)賬
轉(zhuǎn)賬用戶類型:普通用戶,銀卡用戶,金卡用戶… - 消息管理
消息類型:即時消息,延時消息
消息分類:手機短信,郵件消息,QQ消息…
到此這篇關(guān)于Java設(shè)計模式中的橋接模式的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java.io.EOFException產(chǎn)生原因及解決方法(附代碼)
java.io.EOFException表示在讀取數(shù)據(jù)時突然遇到了文件或流的末尾,也就是說客戶端或服務(wù)器已經(jīng)關(guān)閉了連接,但是你還在嘗試讀取數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于java.io.EOFException產(chǎn)生原因及解決的相關(guān)資料,需要的朋友可以參考下2023-09-09java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)
這篇文章主要為大家介紹了java題解Leetcode 8字符串轉(zhuǎn)換整數(shù)實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06java對象與json對象之間互相轉(zhuǎn)換實現(xiàn)方法示例
這篇文章主要介紹了java對象與json對象之間互相轉(zhuǎn)換實現(xiàn)方法,結(jié)合實例形式分析了java對象與json對象相互轉(zhuǎn)換實現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Jmeter連接Mysql數(shù)據(jù)庫實現(xiàn)過程詳解
這篇文章主要介紹了Jmeter連接Mysql數(shù)據(jù)庫實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08Java用戶交互scanner及運算結(jié)構(gòu)代碼詳解
這篇文章主要介紹了Java用戶交互scanner及運算結(jié)構(gòu)代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12