Java設計模式 之 橋接模式

Java設計模式 之 橋接模式

假設現在要用不同的方式組裝不同的電路板,我們先創建統一的 構建方式類電路板抽象類,代碼如下:

public interface IBuildWay {
    // 傳入電路板名字
    void build(String boardName);
}

public abstract class BaseBoard {
    abstract void build();
}

我們來實現 正常構建速度的方式的類 及 構建小米手機電路板:

public class BuildNormalWay implements IBuildWay{

    @Override
    public void build(String boardName) {
        System.out.println(boardName + ":  Build Normal Way");
    }
}
public class XiaomiBoard extends BaseBoard {

    public XiaomiBoard(BuildNormalWay action) {
        super(action);
    }

    @Override
    void build() {
        action.build("XiaomiBoard");
    }
}
public class BuildDemo {

    public static void main(String[] args) {
        BuildNormalWay normalWay = new BuildNormalWay();
        BaseBoard xiaomi = new XiaomiBoard(normalWay);
        xiaomi.build();
    }
}

上述代碼輸出 XiaomiBoard: Build Normal Way,上述代碼可以實現部分需求,但我們發現 電路板不是單一的實現的方式也不是單一 有快有慢

橋接模式實現

這時候我們可以使用 橋接模式 來實現需求,將抽象部分與實現部分分離,使它們都可以獨立的變化,代碼如下:

構建方式:

// 實現接口
public interface IBuildWay {

    void build(String boardName);
}

快速組裝方式

public class BuildQuickWay implements IBuildWay{

    @Override
    public void build(String boardName) {
        System.out.println(boardName + ": Build Quick Way");
    }

}

慢速組裝方式

public class BuildSlowWay implements IBuildWay {

    @Override
    public void build(String boardName) {
        System.out.println(boardName + ": Build Slow Way");
    }

}

電路板:

// 實現公共抽象類
public abstract class BaseBoard {

    protected IBuildWay action;

    public BaseBoard(IBuildWay action) {
        this.action = action;
    }

    abstract void build();
}

蘋果電路板

public class IPhoneBoard extends BaseBoard{

    public IPhoneBoard(IBuildWay action) {
        super(action);
    }

    @Override
    void build() {
        // 實現抽象方法,並調用接口
        // 內部實現抽象方法(可擴展)
        // 再調用外部的實現接口
        action.build("IPhoneBoard");
    }
}

小米電路板

public class XiaomiBoard extends BaseBoard {

    public XiaomiBoard(IBuildWay action) {
        super(action);
    }

    @Override
    void build() {
        // 實現抽象方法,並調用接口
        // 內部實現抽象方法(可擴展)
        // 再調用外部的實現接口
        action.build("XiaomiBoard");
    }
}

執行

public class BuildDemo {

    public static void main(String[] args) {

        //不同的接口實現
        IBuildWay quickWay = new BuildQuickWay();
        BaseBoard xiaomi = new XiaomiBoard(quickWay);

        IBuildWay slowWay = new BuildSlowWay();
        BaseBoard iPhone = new IPhoneBoard(slowWay);

        xiaomi.build();
        iPhone.build();
    }
}
//輸出:
//XiaomiBoard: Build Quick Way
//IPhoneBoard: Build Slow Way

我們會發現使用 橋接模式 ,很好使 電路板實現方式 可以各自擴展而不會相互耦合在一起。

我們最後來總結下
橋接模式
目的:將抽象部分與實現部分分離,使它們都可以獨立的變化。
何時使用:實現系統可能有多個角度分類,每一種角度都可能變化。
實現場景:在有多種可能會變化的情況下,用繼承會造成類爆炸問題,擴展起來不靈活。
如何解決:把這種多角度分類分離出來,讓它們獨立變化,減少它們之間耦合。
關鍵代碼:抽象類依賴實現類。

其他模式可點擊鏈接進目錄閱讀了解:http://blog.csdn.net/xiao_wanzi94/article/details/78118092

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章