Java設(shè)計(jì)模式之橋接模式的實(shí)現(xiàn)
橋接模式
橋接模式是將抽象部分與它的實(shí)現(xiàn)部分分離,使他們都可以獨(dú)立地變化。它是一種對(duì)象結(jié)構(gòu)型模式,又稱為柄體(Handle and Body)模式或接口(Interface)模式。
上圖一個(gè)類被三個(gè)類繼承,使我們的程序擴(kuò)展性,可維護(hù)性低,違反了單一職責(zé)原則。
具體代碼實(shí)現(xiàn)如下:
1.創(chuàng)建品牌接口
package com.jialidun.gof.birdge; //品牌 public interface Brand { void info(); }
2.創(chuàng)建計(jì)算機(jī)的抽象類
package com.jialidun.gof.birdge; //抽象的電腦類型類 public abstract class Computer { //組合,品牌 橋 protected Brand brand; public Computer(Brand brand){ this.brand = brand; } public void info(){ brand.info();//自帶品牌 } }
3.蘋果品牌
package com.jialidun.gof.birdge; //蘋果品牌 public class Apple implements Brand{ @Override public void info() { System.out.print("蘋果"+"\n"); } }
4.聯(lián)想品牌
package com.jialidun.gof.birdge; //聯(lián)想品牌 public class Lenovo implements Brand{ @Override public void info() { System.out.print("聯(lián)想"+"\n"); } }
5.臺(tái)式機(jī)
package com.jialidun.gof.birdge; public class Desktop extends Computer{ public Desktop(Brand brand) { super(brand); System.out.print("臺(tái)式機(jī)"); } }
6.筆記本
package com.jialidun.gof.birdge; public class laptop extends Computer{ public laptop(Brand brand) { super(brand); System.out.print("筆記本"); } }
7.測(cè)試
package com.jialidun.gof.birdge; public class Test { public static void main(String[] args) { //蘋果筆記本 Computer computer = new laptop(new Apple()); computer.info(); //聯(lián)想臺(tái)式機(jī) Desktop desktop = new Desktop(new Lenovo()); desktop.info(); } }
好處分析:
1.橋接模式偶爾類似于多繼承方案,但是多繼承方案違背了類的單一職責(zé)原則, 復(fù)用性比較差,類的個(gè)數(shù)也非常多,橋接模式是比多繼承方案更好的解決方法。極大的減少了子類的個(gè)數(shù),從而降低管理和維護(hù)的成本
2.橋接模式提高了系統(tǒng)的可擴(kuò)充性,在兩個(gè)變化維度中任意擴(kuò)展一個(gè)維度,都不需要修改原有系統(tǒng)。符合開閉原則,就像一座橋,可以把兩個(gè)變化的維度連接起來
劣勢(shì)分析
1.橋接模式的引入會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對(duì)抽象進(jìn)行設(shè)計(jì)與編程。
2.橋接模式要求正確識(shí)別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度,因此其使用范圍具有一定的局限性。
到此這篇關(guān)于Java設(shè)計(jì)模式之橋接模式分析的文章就介紹到這了,更多相關(guān)Java橋接模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用spring-task定時(shí)任務(wù)動(dòng)態(tài)配置修改執(zhí)行時(shí)間
這篇文章主要介紹了使用spring-task定時(shí)任務(wù)動(dòng)態(tài)配置修改執(zhí)行時(shí)間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11IKAnalyzer使用不同版本中文分詞的切詞方式實(shí)現(xiàn)相同功能效果
今天小編就為大家分享一篇關(guān)于IKAnalyzer使用不同版本中文分詞的切詞方式實(shí)現(xiàn)相同功能效果,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式
這篇文章主要介紹了springboot配置項(xiàng)目啟動(dòng)后自動(dòng)打開瀏覽器訪問項(xiàng)目方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01Java之Spring簡(jiǎn)單的讀取和存儲(chǔ)對(duì)象
這篇文章主要介紹了Spring的讀取和存儲(chǔ)對(duì)象,獲取 bean 對(duì)象也叫做對(duì)象裝配,是把對(duì)象取出來放到某個(gè)類中,有時(shí)候也叫對(duì)象注?,想進(jìn)一步了解的同學(xué)可以參考本文2023-04-04springboot?實(shí)現(xiàn)動(dòng)態(tài)刷新配置的詳細(xì)過程
這篇文章主要介紹了springboot實(shí)現(xiàn)動(dòng)態(tài)刷新配置,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05java+testng+selenium的自動(dòng)化測(cè)試實(shí)例
這篇文章主要介紹了java+testng+selenium的自動(dòng)化測(cè)試實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11java提取字符串中數(shù)字string以及獲取字符串中的整數(shù)或小數(shù)
這篇文章主要給大家介紹了關(guān)于java提取字符串中數(shù)字string以及獲取字符串中的整數(shù)或小數(shù)的相關(guān)資料,需要的朋友可以參考下2023-08-08