最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

23種設(shè)計模式(9) java橋接模式

 更新時間:2017年11月09日 10:03:06   作者:靜默虛空  
這篇文章主要為大家詳細(xì)介紹了java設(shè)計模式之橋接模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

介紹

橋接模式 (Bridge)將抽象部分與實現(xiàn)部分分離,使它們都可以獨立的變化。
橋接模式是一種結(jié)構(gòu)式模式。

結(jié)構(gòu)

代碼實現(xiàn)

Implementor : 定義實現(xiàn)接口。

interface Implementor {
  // 實現(xiàn)抽象部分需要的某些具體功能
  public void operationImpl();
}

Abstraction : 定義抽象接口。

abstract class Abstraction {
  // 持有一個 Implementor 對象,形成聚合關(guān)系
  protected Implementor implementor;
  
  public Abstraction(Implementor implementor) {
    this.implementor = implementor;
  }
  
  // 可能需要轉(zhuǎn)調(diào)實現(xiàn)部分的具體實現(xiàn)
  public void operation() {
    implementor.operationImpl();
  }
}

ConcreteImplementor :  實現(xiàn) Implementor 中定義的接口。

class ConcreteImplementorA implements Implementor {
  @Override
  public void operationImpl() {
    // 真正的實現(xiàn)
    System.out.println("具體實現(xiàn)A");
  }  
}

class ConcreteImplementorB implements Implementor {
  @Override
  public void operationImpl() {
    // 真正的實現(xiàn)
    System.out.println("具體實現(xiàn)B");
  }  
}

RefinedAbstraction : 擴(kuò)展 Abstraction 類。

class RefinedAbstraction extends Abstraction {

  public RefinedAbstraction(Implementor implementor) {
    super(implementor);
  }
  
  public void otherOperation() {
    // 實現(xiàn)一定的功能,可能會使用具體實現(xiàn)部分的實現(xiàn)方法,
    // 但是本方法更大的可能是使用 Abstraction 中定義的方法,
    // 通過組合使用 Abstraction 中定義的方法來完成更多的功能。
  }
}

測試代碼

public class BridgePattern {
  public static void main(String[] args) {
    Implementor implementor = new ConcreteImplementorA();
    RefinedAbstraction abstraction = new RefinedAbstraction(implementor);
    abstraction.operation();
    abstraction.otherOperation();
  }
}

運行結(jié)果

具體實現(xiàn)A
其他操作

應(yīng)用場景

1、如果你不希望在抽象和實現(xiàn)部分采用固定的綁定關(guān)系,可以采用橋接模式,來把抽象和實現(xiàn)部分分開,
然后在程序運行期間來動態(tài)的設(shè)置抽象部分需要用到的具體的實現(xiàn),還可以動態(tài)切換具體的實現(xiàn)。

2、如果出現(xiàn)抽象部分和實現(xiàn)部分都應(yīng)該可以擴(kuò)展的情況,可以采用橋接模式,讓抽象部分和實現(xiàn)部分可以
獨立的變化,從而可以靈活的進(jìn)行單獨擴(kuò)展,而不是攪在一起,擴(kuò)展一邊會影響到另一邊。

3、如果希望實現(xiàn)部分的修改,不會對客戶產(chǎn)生影響,可以采用橋接模式,客戶是面向抽象的接口在運行,
實現(xiàn)部分的修改,可以獨立于抽象部分,也就不會對客戶產(chǎn)生影響了,也可以說對客戶是透明的。

4、如果采用繼承的實現(xiàn)方案,會導(dǎo)致產(chǎn)生很多子類,對于這種情況,可以考慮采用橋接模式,分析功能變化的原因,看看是否能分離成不同的緯度,然后通過橋接模式來分離它們,從而減少子類的數(shù)目。

要點

如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的聯(lián)系。
抽象化角色和具體化角色都應(yīng)該可以被子類擴(kuò)展。在這種情況下,橋接模式可以靈活地組合不同的抽象化角色和具體化角色,并獨立化地擴(kuò)展。
設(shè)計要求實現(xiàn)化角色的任何改變不應(yīng)當(dāng)影響客戶端,或者說實現(xiàn)化角色的改變對客戶端是完全透明的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一款不可錯過的Java應(yīng)用診斷利器Arthas

    一款不可錯過的Java應(yīng)用診斷利器Arthas

    Arthas是一款由阿里巴巴開源的Java應(yīng)用診斷利器,它可以幫助開發(fā)人員在運行時對Java應(yīng)用進(jìn)行調(diào)試和診斷,解決線上問題,本文將簡單的描述一下該工具的用法和常用命令,以勾起大家對此工具應(yīng)用的興趣
    2023-06-06
  • Java解析http協(xié)議字符串的方法實現(xiàn)

    Java解析http協(xié)議字符串的方法實現(xiàn)

    本文主要介紹了Java解析http協(xié)議字符串的方法實現(xiàn),我們探討了如何使用Java解析HTTP協(xié)議字符串,并將其封裝成了一個HttpRequest類,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • SpringBoot接口路徑重復(fù),啟動服務(wù)器失敗的解決

    SpringBoot接口路徑重復(fù),啟動服務(wù)器失敗的解決

    這篇文章主要介紹了SpringBoot接口路徑重復(fù),啟動服務(wù)器失敗的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java與C++實現(xiàn)相同的MD5加密算法簡單實例

    Java與C++實現(xiàn)相同的MD5加密算法簡單實例

    下面小編就為大家?guī)硪黄狫ava與C++實現(xiàn)相同的MD5加密算法簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • springboot開啟聲明式事務(wù)的方法

    springboot開啟聲明式事務(wù)的方法

    本篇文章主要介紹了springboot開啟聲明式事務(wù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • ArrayList底層操作機(jī)制源碼解析

    ArrayList底層操作機(jī)制源碼解析

    這篇文章主要介紹了ArrayList底層操作機(jī)制源碼解析,當(dāng)創(chuàng)建ArrayList對象時,如果使用的是無參構(gòu)造器,則初始elementData容量為0,第1次添加,則擴(kuò)容elementData為10,如需要再次擴(kuò)容,則擴(kuò)容elementData為1.5倍,需要的朋友可以參考下
    2023-09-09
  • java.lang.Void類源碼解析

    java.lang.Void類源碼解析

    這篇文章主要介紹了java.lang.Void類源碼解析的相關(guān)內(nèi)容,對源碼中的部分內(nèi)容進(jìn)行解釋,具有一定參考價值,需要的朋友可以了解下。
    2017-10-10
  • java基礎(chǔ)之接口組成更新的實現(xiàn)

    java基礎(chǔ)之接口組成更新的實現(xiàn)

    本文主要介紹了java基礎(chǔ)之接口組成更新的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • SpringBoot整合Ldap的實現(xiàn)示例

    SpringBoot整合Ldap的實現(xiàn)示例

    本文主要介紹了SpringBoot整合Ldap的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11
  • Java實現(xiàn)冒泡排序簡單示例

    Java實現(xiàn)冒泡排序簡單示例

    冒泡排序(Bubble Sort)是一種簡單的排序算法,它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,下面這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)冒泡排序的相關(guān)資料,需要的朋友可以參考下
    2023-06-06

最新評論

七台河市| 达孜县| 荥阳市| 桑日县| 吴桥县| 平武县| 六盘水市| 逊克县| 泾川县| 十堰市| 中宁县| 宜春市| 若尔盖县| 德清县| 定安县| 鲜城| 桐乡市| 新余市| 百色市| 隆德县| 长治县| 石河子市| 高邮市| 肥东县| 墨江| 道孚县| 武平县| 宁阳县| 祁门县| 安康市| 改则县| 什邡市| 梨树县| 绍兴市| 泸定县| 鄂托克旗| 碌曲县| 井研县| 皮山县| 赣榆县| 蓝山县|