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

橋接模式(Bridge),將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。優(yōu)先使用對象的合成/聚合將有助于你保持每個(gè)類被封裝,并被集中在單個(gè)任務(wù)上。這樣類和類繼承層次會(huì)保持較小規(guī)模,并且不太可能增長為不可控制的龐然大物。

適用場景

  1. 當(dāng)一個(gè)對象有多個(gè)變化因素的時(shí)候,通過抽象這些變化因素,將依賴具體實(shí)現(xiàn),修改為依賴抽象。
  2. 當(dāng)某個(gè)變化因素在多個(gè)對象中共享時(shí)。我們可以抽象出這個(gè)變化因素,然后實(shí)現(xiàn)這些不同的變化因素。
  3. 當(dāng)我們期望一個(gè)對象的多個(gè)變化因素可以動(dòng)態(tài)的變化,而且不影響客戶的程序的使用時(shí)。

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

  1. 分離抽象和實(shí)現(xiàn)部分
  2. 更好的擴(kuò)展性
  3. 可動(dòng)態(tài)地切換實(shí)現(xiàn)
  4. 可減少子類的個(gè)數(shù)

缺點(diǎn)

  1. 橋接模式的引入會(huì)增加系統(tǒng)的理解與設(shè)計(jì)難度,由于聚合關(guān)聯(lián)關(guān)系建立在抽象層,要求開發(fā)者針對抽象進(jìn)行設(shè)計(jì)與編程。
  2. 橋接模式要求正確識(shí)別出系統(tǒng)中兩個(gè)獨(dú)立變化的維度,因此其使用范圍具有一定的局限性。

UML結(jié)構(gòu)圖

BridgePattern

源碼

Implementor:實(shí)現(xiàn)接口

/**
 * 實(shí)現(xiàn)接口
 *
 * Created by zhenguo on 12/8/14.
 */
public interface Implementor {

    public void operation();

}

ConcreteImplementorA:實(shí)現(xiàn)派生類A

/**
 * 實(shí)現(xiàn)派生類A
 *
 * Created by zhenguo on 12/8/14.
 */
public class ConcreteImplementorA implements Implementor {
    @Override
    public void operation() {
        System.out.println("具體實(shí)現(xiàn)A的方法執(zhí)行");
    }
}

ConcreteImplementorB:實(shí)現(xiàn)派生類B

/**
 * 實(shí)現(xiàn)派生類B
 *
 * Created by zhenguo on 12/8/14.
 */
public class ConcreteImplementorB implements Implementor {
    @Override
    public void operation() {
        System.out.println("具體實(shí)現(xiàn)B的方法執(zhí)行");
    }
}

Abstraction:抽象類

/**
 * 抽象類
 *
 * Created by zhenguo on 12/8/14.
 */
public abstract class Abstraction {

    protected Implementor implementor;

    public void setImplementor(Implementor implementor) {
        this.implementor = implementor;
    }

    public abstract void operation();

}

RefinedAbstraction:抽象實(shí)現(xiàn)子類

/**
 * 抽象實(shí)現(xiàn)子類
 *
 * Created by zhenguo on 12/8/14.
 */
public class RefinedAbstraction extends Abstraction {
    @Override
    public void operation() {
        if (implementor != null) {
            implementor.operation();
        }
    }
}

Client:客戶端調(diào)用

/**
 * 客戶端調(diào)用
 * 橋接模式(Bridge),將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
 *
 * Created by zhenguo on 12/8/14.
 */
public class Client {

    public static void main(String[] args) {
        Abstraction abstraction = new RefinedAbstraction();

        abstraction.setImplementor(new ConcreteImplementorA());
        abstraction.operation();

        abstraction.setImplementor(new ConcreteImplementorB());
        abstraction.operation();

    }

}

設(shè)計(jì)模式系列:

創(chuàng)建型 結(jié)構(gòu)型 行為型
工廠方法
簡單工廠
抽象工廠
建造者模式
單例模式
原型模式
組合模式
外觀模式
橋接模式
代理模式
享元模式
適配器模式
裝飾模式
策略模式
模板方法
狀態(tài)模式
觀察者模式
備忘錄模式
迭代器模式
命令模式
職責(zé)鏈模式
解釋器模式
訪問者模式
中介者模式
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1. 意圖 將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。 【GOF95】在提出橋梁模式的時(shí)候指出,橋梁模...
    CrixalisAs閱讀 394評(píng)論 0 0
  • 1 場景問題# 1.1 發(fā)送提示消息## 考慮這樣一個(gè)實(shí)際的業(yè)務(wù)功能:發(fā)送提示消息?;旧纤袔I(yè)務(wù)流程處理的系統(tǒng)...
    七寸知架構(gòu)閱讀 5,217評(píng)論 5 63
  • 橋接模式 定義 將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。它是一種對象結(jié)構(gòu)型模式,又稱為柄體(Hand...
    晨鳴code閱讀 1,637評(píng)論 2 3
  • 說好的約定在野菊開時(shí) 你不來 我心中的野菊未開 季節(jié)停留在濃稠的樹枝 我數(shù)著樹葉的光陰 秋風(fēng)才剛剛起步 野菊的枝在...
    淡然li閱讀 586評(píng)論 23 34
  • ?今天給大家發(fā)的這些詞匯那就厲害了! 這些詞被貼上了文化的標(biāo)簽,只有知識(shí)很豐富的孩子才會(huì)用它?。∷?,筒志們多學(xué)學(xué)...
    德邇德語閱讀 310評(píng)論 0 1

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