欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java設計模式--橋接模式詳解

 更新時間:2021年07月19日 17:16:09   作者:吾仄lo咚鏘  
這篇文章主要為大家詳細介紹了java設計模式之橋接模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助

引例

需求:對不同手機類型的不同品牌(比如按鍵手機:諾基亞、翻蓋手機:紐曼、智能手機:華為、小米)實現(xiàn)操作編程(比如: 開機、關機、打電話)。

先來說說一般解法:將不同手機類型繼承父類手機,最后各個品牌再繼承對應手機類型:

在這里插入圖片描述

弊端:乍一看沒問題,但其實不易擴展(類爆炸),如果增加新的手機類型(比如新興的折疊式),就需要增加各個手機品牌的類去繼承(比如已繼承智能手機的華為小米)。同樣如果我們增加一個手機品牌,也要在各個手機樣式類下增加。違反了單一職責原則,維護成本高。

解決方案就是下面的主角:橋接模式。

橋接模式

橋接模式(Bridge)是一種結構型設計模式。顧名思義,就像搭個橋連接起來,通過使用封裝、聚合及繼承等行為讓不同的類承擔不同的職責,將實現(xiàn)與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變,保持各部分的獨立性以及應對他們的功能擴展。

原理類圖:

在這里插入圖片描述

  • Client類:客戶端調用
  • Abstraction抽象類:充當橋接類,維護了Implementor接口(即它的實現(xiàn)類ConcreteImplementorA…)
  • RefindAbstraction類:是抽象類的子類
  • Implementor接口:行為實現(xiàn)接口
  • ConcreteImplementorA/B類:行為的具體實現(xiàn)類

從UML類圖看出,抽象類和接口是聚合的關系,即調用和被調用的關系。如此一來搭好橋后,具體實現(xiàn)類調用方法=》父類抽象類的方法=》行為接口方法=》具體接口行為實現(xiàn)類,以完成連接,同時兩者又相互獨立易擴展:

在這里插入圖片描述

實戰(zhàn)示例

用橋接模式來解決引例的實際問題。

類圖:

在這里插入圖片描述

代碼:

//接口
public interface Brand {
	void open(); //開機
	void close(); //關機
	void call();//打電話
}
//接口實現(xiàn)類
public class NOKIA implements Brand{
    @Override
    public void open() {
        System.out.println("諾基亞手機開機");
    }
    @Override
    public void close() {
        System.out.println("諾基亞手機關機");
    }
    @Override
    public void call() {
        System.out.println("諾基亞手機打電話");
    }
}
public class Newsmy implements Brand{
    @Override
    public void open() {
        System.out.println("紐曼手機開機");
    }
    @Override
    public void close() {
        System.out.println("紐曼手機關機");
    }
    @Override
    public void call() {
        System.out.println("紐曼手機打電話");
    }
}
public class Huawei implements Brand{
    @Override
    public void open() {
        System.out.println("華為手機開機");
    }
    @Override
    public void close() {
        System.out.println("華為手機關機");
    }
    @Override
    public void call() {
        System.out.println("華為手機打電話");
    }
}
public class Xiaomi implements Brand{
    @Override
    public void open() {
        System.out.println("小米手機開機");
    }
    @Override
    public void close() {
        System.out.println("小米手機關機");
    }
    @Override
    public void call() {
        System.out.println("小米手機打電話");
    }
}
//抽象類
public abstract class Phone {
	private Brand brand;//手機品牌接口
	public Phone(Brand brand) {//構造器
		super();
		this.brand = brand;
	}
	public void open() {
		this.brand.open();
	}
	public void close() {
		this.brand.close();
	}
	public void call() { this.brand.call(); }
}
//抽象子類
public class ButtonPhone extends Phone{
    public ButtonPhone(Brand brand) {
        super(brand);
    }
    public void open() {
        super.open();
        System.out.println("按鍵手機");
    }
    public void close() {
        super.close();
        System.out.println("按鍵手機");
    }
    public void call() {
        super.call();
        System.out.println("按鍵手機");
    }
}
public class SlidePhone extends Phone{
    public SlidePhone(Brand brand) {
        super(brand);
    }
    public void open() {
        super.open();
        System.out.println("翻蓋手機");
    }
    public void close() {
        super.close();
        System.out.println("翻蓋手機");
    }
    public void call() {
        super.call();
        System.out.println("翻蓋手機");
    }
}
public class SmartPhone  extends Phone{
    public SmartPhone(Brand brand) {
        super(brand);
    }
    public void open() {
        super.open();
        System.out.println("智能手機");
    }
    public void close() {
        super.close();
        System.out.println("智能手機");
    }
    public void call() {
        super.call();
        System.out.println("智能手機");
    }
}
//客戶端調用
public class Client {
    public static void main(String[] args) {
        Phone phone1 = new ButtonPhone(new NOKIA());
        phone1.open();
        phone1.call();
        phone1.close();
        System.out.println("=======================");
        Phone phone2 = new SlidePhone(new Newsmy());
        phone2.open();
        phone2.call();
        phone2.close();
        System.out.println("=======================");
        Phone phone3 = new SmartPhone(new Huawei());
        phone3.open();
        phone3.call();
        phone3.close();
    }
}

在這里插入圖片描述

總結

  • 實現(xiàn)了抽象和實現(xiàn)部分的分離,從而極大的提供了系統(tǒng)的靈活性,讓抽象部分和實現(xiàn)部分獨立開來,這有助于系統(tǒng)進行分層設計,從而產生更好的結構化系統(tǒng)。
  • 橋接模式替代多層繼承方案,可以減少子類的個數,降低系統(tǒng)的管理和維護成本。
  • 橋接模式的引入增加了系統(tǒng)的理解和設計難度,由于聚合關聯(lián)關系建立在抽象層,要求開發(fā)者針對抽象進行設計和編程
  • 常見的應用場景: -JDBC驅動程序

-銀行轉賬系統(tǒng)

轉賬分類: 網上轉賬,柜臺轉賬,AMT轉賬

轉賬用戶類型:普通用戶,銀卡用戶,金卡用戶…

 -消息管理

消息類型:即時消息,延時消息

消息分類:手機短信,郵件消息,QQ消息…

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

相關文章

  • Spring?refresh()源碼解析

    Spring?refresh()源碼解析

    這篇文章主要為大家介紹了Spring?refresh()源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 關于Spring Cloud健康檢查的陷阱

    關于Spring Cloud健康檢查的陷阱

    這篇文章主要介紹了關于Spring Cloud健康檢查的陷阱,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java用GDAL讀寫shapefile的方法示例

    Java用GDAL讀寫shapefile的方法示例

    Shapefile文件是描述空間數據的幾何和屬性特征的非拓撲實體矢量數據結構的一種格式,由ESRI公司開發(fā)。這篇文章給大家介紹了Java如何用GDAL讀寫shapefile的方法示例,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2016-12-12
  • SpringBoot中MapStruct實現(xiàn)優(yōu)雅的數據復制

    SpringBoot中MapStruct實現(xiàn)優(yōu)雅的數據復制

    本文主要介紹了SpringBoot中MapStruct實現(xiàn)優(yōu)雅的數據復制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-08-08
  • 解決Java中socket使用getInputStream()阻塞問題

    解決Java中socket使用getInputStream()阻塞問題

    這篇文章主要介紹了解決Java中socket使用getInputStream()阻塞問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java+selenium 網易云音樂刷累計聽歌數的方法

    java+selenium 網易云音樂刷累計聽歌數的方法

    這篇文章主要介紹了java+selenium 網易云音樂刷累計聽歌數的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • 簡單了解Spring中的事務控制

    簡單了解Spring中的事務控制

    這篇文章主要介紹了簡單了解Spring中的事務控制,事務是一組操作的執(zhí)行單元,下面我們來簡單學習一下吧
    2019-05-05
  • Java如何實現(xiàn)登錄token令牌

    Java如何實現(xiàn)登錄token令牌

    這篇文章主要介紹了Java如何實現(xiàn)登錄token令牌,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java計時新姿勢StopWatch詳解

    Java計時新姿勢StopWatch詳解

    這篇文章主要介紹了Java計時新姿勢StopWatch,最近公司來了個大佬,從他那里學到不少東西,其中一個就是計時的新姿勢「StopWatch」,需要的朋友可以參考下
    2019-07-07
  • java中join方法的理解與說明詳解

    java中join方法的理解與說明詳解

    這篇文章主要給大家介紹了關于java中join方法的理解與說明的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論