博客 / 詳情

返回

橋接模式

將抽象和具體實現分離,通過抽象類來關聯其具體實現,減少類之間的耦合。

下面通過一個車廠和汽車品牌的實例來實現橋接模式

汽車品牌的抽象 接口 裏面聲明一個獲取汽車品牌的方法

public interface Brand {
    String brandName();
}

車廠抽象類 其中會組合汽車品牌的抽象 裏面聲明一個輸出汽車信息的抽象方法

public abstract class Depot {
    Brand brand;

    public void setBrand(Brand brand) {
        this.brand = brand;
    }

    public abstract void message();
}

汽車品牌的具體實現,我們增加豐田、福特兩個品牌

public class Toyota implements Brand{
    private final String name = "豐田";

    @Override
    public String brandName() {
        return name;
    }
}

public class Ford implements Brand{
    private final String name = "福特";

    @Override
    public String brandName() {
        return name;
    }
}

汽車廠的兩個具體實現,增加一汽、上汽兩個車廠類

public class FAWDepot extends Depot{
    @Override
    public void message() {
        System.out.println("一汽汽車廠生產的"+super.brand.brandName());
    }
}

public class SAICDepot extends Depot{
    @Override
    public void message() {
        System.out.println("上汽汽車廠生產的"+super.brand.brandName());
    }
}

測試類

public class BridgeTest {
    @Test
    public void test(){
        Depot faw = new FAWDepot();
        faw.setBrand(new Ford());
        faw.message();

        Depot saic = new SAICDepot();
        saic.setBrand(new Toyota());
        saic.message();
    }
}
====結果====
一汽汽車廠生產的福特
上汽汽車廠生產的豐田

我們可以上面的實現中發現,只有在Depot中引用了Brand,這兩個類(接口)都是抽象層面的實現,沒有具體到某一車廠和具體品牌,然後就可以在客户端中通過兩個抽象類建立的“橋”去組合,Depot的具體實現類和Brand的具體實現類。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.