中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java橋接模式怎么使用

發布時間:2022-05-05 10:50:48 來源:億速云 閱讀:159 作者:iii 欄目:編程語言

這篇文章主要介紹“Java橋接模式怎么使用”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java橋接模式怎么使用”文章能幫助大家解決問題。

Java橋接模式怎么使用

其實在現實生活中,有很多類可以有兩個或多個維度的變化,如圖形既可按形狀分,又可按顏色分,如果用繼承方式,m 種形狀和 n 種顏色的圖形就有 m*n 種,不但對應的子類很多,而且擴展比較困難。

比如不同顏色和字體的文字、不同品牌和功率的汽車、不同性別和職業的男女、支持不同平臺和不同文件格式的媒體播放器等。如果用橋接模式就能很好地解決這些問題。


1、橋接模式的定義

將抽象與實現分離,使它們可以獨立變化。它是用組合關系代替繼承關系來實現,從而降低了抽象和實現這兩個可變維度的耦合度

模式類型:結構設計模式

原理類圖:
Java橋接模式怎么使用
原理類圖說明:

  1. Client類: 橋接模式的調用者

  2. 抽象類(Abstraction) : 維護了Implementor/即它的實現類ConcretelmplementorA…二者是器合關系,Abstraction充當橋接英

  3. RehinedAbstraction: 是Abstraction抽象類的子類lmplementor:行為實現類的接口

  4. ConcretelmplementorA/B: 行為的具體實現類

  5. 從UML圖: 這里的抽象類和接口是聚合的關系,其實調用和被調用關系


2、橋接模式的優缺點

優點:

  1. 抽象與實現分離,擴展能力強

  2. 符合開閉原則

  3. 符合合成復用原則

  4. 其實現細節對客戶透明

缺點:

  • 由于聚合關系建立在抽象層,要求開發者針對抽象化進行設計與編程,能正確地識別出系統中兩個獨立變化的維度,這增加了系統的理解與設計難度


3、橋接模式的結構

橋接(Bridge)模式包含以下主要角色:

  1. 抽象化(Abstraction)角色: 定義抽象類,并包含一個對實現化對象的引用

  2. 擴展抽象化(Refined Abstraction)角色:是抽象化角色的子類,實現父類中的業務方法,并通過組合關系調用實現化角色中的業務方法

  3. 實現化(Implementor)角色:定義實現化角色的接口,供擴展抽象化角色調用

  4. 具體實現化(Concrete Implementor)角色:給出實現化角色接口的具體實現

結構圖:

Java橋接模式怎么使用
該結構圖的實現代碼:

實視化角色:

/**
 * 實視化角色
 */public interface Implemntor {

    public void OperationImpl();}

具體實現化角色:

/**
 * 具體實現化角色
 */public class ConcreteImplementorA implements Implemntor{
    @Override
    public void OperationImpl() {
        System.out.println("具體實現化角色被訪問");
    }}

抽象化角色:

/**
 * 抽象化角色
 */public abstract class Abstraction {

    protected Implemntor implemntor;

    protected Abstraction(Implemntor implemntor){
        this.implemntor = implemntor;
    }

    public abstract void Operation();}

擴展抽象化角色:

/**
 * 擴展抽象化角色
 */public class RefinedAbstraction extends Abstraction{

    protected RefinedAbstraction(Implemntor implemntor) {
        super(implemntor);
    }

    public void Operation(){
        System.out.println("擴展抽象化角色被訪問");
        implemntor.OperationImpl();
    }}

測試類:

public class Test {
    public static void main(String[] args) {

        Implemntor implemntor = new ConcreteImplementorA();
        Abstraction abs = new RefinedAbstraction(implemntor);
        abs.Operation();

    }}

輸出:

擴展抽象化角色被訪問
具體實現化角色被訪問

4 、橋接模式的案例實現

將實現與抽象放在兩個不同的類層次中,使兩個層次可以獨立改變

交通工具在路上行駛,這里有兩個維度的變化,交通工具的類型不同路也分水泥路和柏油路

類圖:
Java橋接模式怎么使用

交通工具類:

/**
 * 交通工具類
 */public interface Vehicle {

    public void drive();}

具體的交通工具:小汽車

/**
 * 具體的交通工具:小汽車
 */public class Car implements Vehicle{
    @Override
    public void drive() {
        System.out.println("小汽車");
    }}

具體的交通工具:大巴車

/**
 * 具體的交通工具:大巴車
 */public class Bus implements Vehicle{
    @Override
    public void drive() {
        System.out.println("大巴車");
    }}

抽象的路:

/**
 * 抽象的路
 */public abstract class Road {

    protected Vehicle vehicle;

    public Road(Vehicle vehicle){
        this.vehicle = vehicle;
    }

    public abstract void driveOnRoad();}

具體的路:油柏路

/**
 * 具體的路:油柏路
 */public class UnpavedRoad extends Road{
    public UnpavedRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {

        super.vehicle.drive();
        System.out.println("行駛在油柏路");
    }}

具體的路:水泥路

/**
 * 具體的路:水泥路
 */public class CementRoad extends Road{
    public CementRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {
        super.vehicle.drive();
        System.out.println("行駛在水泥路");
    }}

測試類:

//測試public class Test {
    public static void main(String[] args) {

        Road roadCar = new CementRoad(new Car());
        roadCar.driveOnRoad();

        Road roadBus = new CementRoad(new Bus());
        roadBus.driveOnRoad();

    }}

輸出:

小汽車
行駛在水泥路
大巴車
行駛在水泥路

5、橋接模式的注意事項

  1. 實現了抽象和實現部分的分離,從而極大的提供了系統的靈活性,讓抽象部分和實現部分獨立開來,這有助于系統進行分層設計,從而產生更好的結構化系統

  2. 對于系統的高層部分,只需要知道抽象部分和實現部分的接口就可以了,其它的部分由具體業務來完成

  3. 橋接模式替代多層繼承方案,可以減少子類的個數,降低系統的管理和維護成本

  4. 橋接模式的引入增加了系統的理解和設計難度,由于聚合關聯關系建立在抽象層,要求開發者針對抽象進行設計和編程

  5. 橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用范圍有一定的局限性,即需要有這樣的應用場景


6、橋接模式應用場景

對于那些不希望使用繼承或因為多層次繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用.

關于“Java橋接模式怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丰都县| 福清市| 盐源县| 喜德县| 措美县| 当雄县| 盐津县| 青川县| 湘乡市| 榆社县| 迭部县| 甘洛县| 南通市| 高邑县| 宁陵县| 闻喜县| 新宁县| 平顺县| 德化县| 仁化县| 彭阳县| 卓资县| 从化市| 中江县| 商南县| 清水县| 环江| 澳门| 徐闻县| 沐川县| 永福县| 临沂市| 东明县| 讷河市| 桦南县| 且末县| 江油市| 萍乡市| 鄯善县| 揭阳市| 昆山市|