【設計模式】Java設計模式 – 橋接模式

【設計模式】Java設計模式 – 橋接模式

😄 不斷學習才是王道
🔥 繼續踏上學習之路,學之分享筆記
👊 總有一天我也能像各位大佬一樣
🏆原創作品,更多關注我CSDN: 一個有夢有戲的人
👊準備將博客園、CSDN一起記錄分享自己的學習心得!!!
🌝分享學習心得,歡迎指正,大家一起學習成長!

請添加圖片描述

簡介

橋接(Bridge)是用於把抽象化與實現化解耦,使得二者可以獨立變化。這種類型的設計模式屬於結構型模式,它通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。

這種模式涉及到一個作為橋接的接口,使得實體類的功能獨立於接口實現類。這兩種類型的類可被結構化改變而互不影響。

橋接模式實例

橋接模式:將實現和抽象放在兩個不同的類層次中,使之各自可以獨立改變。
他的主要特點是把抽象與行為分離開來,保持了各自的獨立性和擴展。

舉個汽車例子,汽車有多種品牌,也有多種類型,在擴展樣式或者品牌的時候互不影響,我們就可以將抽象部分與實現部分分離,使它們都可以獨立的變化,讓它們獨立變化,來減少它們之間耦合。

UML圖:
在這裡插入圖片描述
提供商標接口類,汽車品牌是他的實現類;汽車類是抽象類,汽車的類別通過繼承抽象類來分離出來。

代碼示例

代碼如下:

①、品牌接口

package com.lyd.demo;
/**
 * @Author: lyd
 * @Description: 汽車品牌的接口
 * @Date: 2022-08-28
 */
public interface Brand {
    void info();
    void open();
    void close();
}

②、汽車品牌

繼承汽車接口類

package com.lyd.demo.car;

import com.lyd.demo.Brand;

/**
 * @Author: lyd
 * @Description: 奔馳汽車類
 * @Date: 2022-08-28
 */
public class Benz implements Brand {
    private String type;

    public Benz(String type) {
        this.type = type;
    }

    public void info() {
        System.out.println("奔馳汽車->" + type);
    }

    public void open() {
        System.out.println("奔馳汽車");
    }

    public void close() {
        System.out.println("奔馳汽車");
    }
}

紅旗汽車類相同,這裡就不貼代碼,詳細代碼之後會上傳github中。

③、抽象汽車類

通過聚合方式,使用構造法獲取品牌對象進行實例化

package com.lyd.demo;
/**
 * @Author: lyd
 * @Description: 汽車抽象類
 * @Date: 2022-08-28
 */
public abstract class Car {
    private Brand brand;
    public Car(Brand brand) {
        this.brand = brand;
    }
    public void info() {
        this.brand.info();
    }
    public void open() {
        this.brand.open();
    }
    public void close() {
        this.brand.close();
    }
}

④、汽車類型子類

繼承父類,重寫父類方法,這裡也調用了父類方法,用打印的方式簡單理解

package com.lyd.demo.type;
import com.lyd.demo.Brand;
import com.lyd.demo.Car;
/**
 * @Author: lyd
 * @Description: 新能源
 * @Date: 2022-08-28
 */
public class NewEnergy extends Car {
    public NewEnergy(Brand brand) {
        super(brand);
    }
    public void info() {
        System.out.print("新能源類型汽車 -- ");
        super.info();
    }
    public void open() {
        System.out.print("新能源類型汽車啟動 -- ");
        super.open();
    }
    public void close() {
        System.out.print("新能源類型汽車關閉 -- ");
        super.close();
    }
}

⑤、橋接模式測試

通過new汽車類型方式獲取汽車對象,其中可得到什麼類型什麼品牌的汽車

package com.lyd.demo.bridge;
import com.lyd.demo.Car;
import com.lyd.demo.car.Benz;
import com.lyd.demo.car.HongQi;
import com.lyd.demo.type.NewEnergy;
import com.lyd.demo.type.Suv;
/**
 * @Author: lyd
 * @Description: 測試
 * @Date: 2022-08-28
 */
public class BridgeTest {
    public static void main(String[] args) {
        Car banz = new Suv(new Benz("GLA"));
        banz.info();
        banz.open();
        banz.close();
        Car hq = new NewEnergy(new HongQi("H5"));
        hq.info();
        hq.open();
        hq.close();
    }
}

運行結果:
在這裡插入圖片描述
👍創作不易,如有錯誤請指正,感謝觀看!記得一鍵三連哦!👍

💓德德小建議:

理解設計模式不是一件簡單的事情,需要不斷的學習和動手去練習,才能理解。只有掌握好設計模式,才能夠真正的理解SpringAOP和Mybatis的底層原理。各位讀者可以和我一樣,動手敲一敲代碼,甚至用不同的例子來做,通過debug一步一步調試,還有就是多看看別人的例子。能夠有助於理解!謝謝各位觀看指點!❤️ ❤️ ❤️