設(shè)計(jì)模式——橋接模式

一、介紹

當(dāng)系統(tǒng)中存在多個(gè)維度的變量相互依賴,且又要能獨(dú)立的變化、拓展,傳統(tǒng)多級(jí)繼承方案會(huì)出現(xiàn)類爆炸的情況,且子類代碼高度相似,當(dāng)一級(jí)子類需要拓展時(shí),相應(yīng)的二級(jí)子類都需要做出修改,不符合類得單一職責(zé)原則,因?yàn)槎?jí)子類繼承了一級(jí)子類,同時(shí)兼具了一級(jí)和二級(jí)功能。處理這種由于系統(tǒng)多級(jí)繼承導(dǎo)致的類急劇增加問題,橋接模式尤為適用。橋接模式將不同維度的變量抽象出來,放在不同的類層次中,使它們互相獨(dú)立,獨(dú)自負(fù)責(zé)各自的功能拓展,再通過組合這種相比繼承要低耦合的關(guān)聯(lián)方式將不同維度的變量結(jié)合在一起。

二、模式

1、傳統(tǒng)模式UML

傳統(tǒng)多層繼承

傳統(tǒng)模式中,當(dāng)Computer品牌再增加一個(gè),那么相應(yīng)的二級(jí)處理器類需要增加兩個(gè),如果再多一級(jí)顯卡驅(qū)動(dòng)(集顯、獨(dú)顯),那么整個(gè)系統(tǒng)的類數(shù)量將呈指數(shù)級(jí)增加,出現(xiàn)類爆炸的情況,而且當(dāng)一級(jí)子類修改功能時(shí),二級(jí)子類也需要修改,對(duì)于二級(jí)子類來說不符合單一職責(zé)原則。

2、橋接模式UML

橋接模式

CPU從Computer中分離出來,分處兩個(gè)不同的層級(jí),CPU以組合的方式集成到Conputer中,這樣當(dāng)CPU或者Computer需要拓展時(shí),都不需要關(guān)注對(duì)象的情況,而且也不會(huì)出現(xiàn)類爆炸的情況。

三、代碼實(shí)例

public abstract class Computer {

    public Computer(CPU cpu) {
    }

    protected abstract void  run();
}
public interface CPU {

    String structure();
}
public class Asus extends Computer{

    private CPU mCpu;

    public Asus(CPU cpu) {
        super(cpu);
        mCpu = cpu;
    }

    public void setCpu(CPU cpu){
        mCpu = cpu;
    }

    @Override
    protected void run() {
        System.out.println("華碩電腦搭載"+mCpu.structure());
    }
}
public class CoreI3 implements CPU{

    @Override
    public String structure() {
        return "酷睿i3處理器";
    }
}
public class Main {

    public static void main(String[] args){
        Asus asus = new Asus(new CoreI3());
        asus.run();
        asus.setCpu(new CoreI5());
        asus.run();
        System.out.println("****************");
        Lenovo lenovo = new Lenovo(new CoreI3());
        lenovo.run();
        lenovo.setCpu(new CoreI5());
        lenovo.run();
    }
}
運(yùn)行結(jié)果

四、總結(jié)

橋接模式抽象了相互依賴的模塊,分離抽象和實(shí)現(xiàn),模塊之間以組合的方式關(guān)聯(lián)起來,對(duì)于高層來說,只關(guān)心抽象部分,具體業(yè)務(wù)細(xì)節(jié)由子類去實(shí)現(xiàn),解決了多層繼承方案帶來的類爆炸問題和不符合單一職責(zé)原則問題,使得系統(tǒng)便于拓展、易維護(hù)。

最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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