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

在 GoF 的《設(shè)計(jì)模式》一書中,橋接模式被定義為:“將抽象和實(shí)現(xiàn)解耦,讓它們可以獨(dú)立變化?!倍x中的“抽象”,指的并非“抽象類”或“接口”,而是被抽象出來的一套“類庫”,它只包含骨架代碼,真正的業(yè)務(wù)邏輯需要委派給定義中的“實(shí)現(xiàn)”來完成。而定義中的“實(shí)現(xiàn)”,也并非“接口的實(shí)現(xiàn)類”,而是一套獨(dú)立的“類庫”。

應(yīng)用場景

系統(tǒng)可能有多個(gè)維度,每個(gè)維度都有可能變化。

類圖

image.png

將Color類組合在Shape中來將形狀和顏色解耦,各自維護(hù)各自的變化,這里體現(xiàn)了組合優(yōu)于繼承的設(shè)計(jì)原則。

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

代碼實(shí)現(xiàn)

Color

public abstract class Color {

    public abstract void paint(String shape);

}

Red

public class Red extends Color {

    @Override
    public void paint(String shape) {
        System.out.println("紅色的" + shape);
    }

}

Green

public class Green extends Color {

    @Override
    public void paint(String shape) {
        System.out.println("綠色的" + shape);
    }

}

Shape

public abstract class Shape {

    protected Color color;

    public void setColor(Color color) {
        this.color = color;
    }

    public abstract void draw();

}

Circle

public class Circle extends Shape {

    @Override
    public void draw() {
        color.paint("圓形");
    }

}

Square

public class Square extends Shape {

    @Override
    public void draw() {
        color.paint("正方形");
    }

}

Main

public class Main {

    public static void main(String[] args) {
        Shape shape;
        Color color;

        color = new Red();
        shape = new Circle();
        shape.setColor(color);
        shape.draw();

        color = new Green();
        shape = new Square();
        shape.setColor(color);
        shape.draw();
    }

}

至此,我們已經(jīng)完成了橋接模式的學(xué)習(xí)。橋接模式在實(shí)際項(xiàng)目中并不常用,這里我們了解認(rèn)識即可。

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

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

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