橋接模式-java

概念:

橋接模式將抽象與實(shí)現(xiàn)分離,使它們可以獨(dú)立變化。它是用組合關(guān)系代替繼承關(guān)系來(lái)實(shí)現(xiàn),從而降低了抽象和實(shí)現(xiàn)這兩個(gè)可變維度的耦合度。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式。

橋接模式包含以下角色:

抽象化(Abstraction)角色:定義抽象類,并包含一個(gè)實(shí)現(xiàn)化對(duì)象的引用

擴(kuò)展抽象化(Refined Abstraction)角色:是抽象化角色的子類,實(shí)現(xiàn)父類中的業(yè)務(wù)方法,并通過(guò)組合關(guān)系調(diào)用實(shí)現(xiàn)化角色中的業(yè)務(wù)方法

實(shí)現(xiàn)化(Implementor)角色:定義實(shí)現(xiàn)化角色的接口,供擴(kuò)展化角色調(diào)用

具體實(shí)現(xiàn)化(Concrete Implementor)角色:給出實(shí)現(xiàn)化角色的具體實(shí)現(xiàn)

實(shí)現(xiàn)案例:

給出商店(實(shí)現(xiàn)化角色Shop
給出水果店和蔬菜店(兩個(gè)具體實(shí)現(xiàn)化角色Fruits、Vegetables
定義人類(抽象化角色People),其中聚合了實(shí)現(xiàn)化角色
定義具體人(擴(kuò)展抽象化角色ZhangSan)繼承抽象化角色

//實(shí)現(xiàn)化角色 (商店)
public interface Shop {
    void sell(String name);
}
//具體實(shí)現(xiàn)化角色 (水果店)
public class Fruits implements Shop {
    @Override
    public void sell(String name) {
        System.out.println("水果店: " + name);
    }
}
//具體實(shí)現(xiàn)化角色 (蔬菜店)
public class Vegetables implements Shop {

    @Override
    public void sell(String name) {
        System.out.println("蔬菜店: " + name);
    }
}
//抽象化角色 (人)
public abstract class People {
    protected Shop shop;

    public People(Shop shop) {
        this.shop = shop;
    }

    public abstract void buy(String name);
}
//擴(kuò)展抽象化角色 (張三)
public class ZhangSan extends People {

    public ZhangSan(Shop shop) {
        super(shop);
    }

    @Override
    public void buy(String name) {
        shop.sell(name);
    }
}
public class Test {
    public static void main(String[] args) {
        People people = new ZhangSan(new Vegetables());
        people.buy("大白菜");
        People people1 = new ZhangSan(new Fruits());
        people1.buy("蘋果");
    }
}
測(cè)試輸出結(jié)果:
image.png

當(dāng)需要增加其他類型的商店時(shí),只需要增加一個(gè)具體實(shí)現(xiàn)化角色即可;當(dāng)有其他人去購(gòu)買時(shí),只需要增加擴(kuò)展抽象化角色即可。橋接模式,大大增加了系統(tǒng)的擴(kuò)展性。

優(yōu)點(diǎn):

1、抽象和實(shí)現(xiàn)的分離。
2、優(yōu)秀的擴(kuò)展能力。
3、實(shí)現(xiàn)細(xì)節(jié)對(duì)客戶透明。

缺點(diǎn):

橋接模式的引入會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開(kāi)發(fā)者針對(duì)抽象進(jìn)行設(shè)計(jì)與編程

使用場(chǎng)景:

1、當(dāng)一個(gè)類存在兩個(gè)獨(dú)立變化的維度,且這兩個(gè)維度都需要進(jìn)行擴(kuò)展
2、當(dāng)一個(gè)系統(tǒng)不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類個(gè)數(shù)急劇增加時(shí)
3、當(dāng)一個(gè)系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性時(shí),避免在兩個(gè)層次之間建立靜態(tài)的繼承關(guān)系,通過(guò)橋接模式可以使他們?cè)诔橄髮咏⒁粋€(gè)關(guān)聯(lián)關(guān)系。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容