設計模式():橋接模式

概念

如果實現系統可能有多個角度,每一種分類都可能有變化,那麼就把這種多角度分離出來讓它們獨立變化,減少它們之間的耦合。
**根據合成/聚合服用原則,儘量使用合成/聚合,儘量不要使用類繼承。**以手機爲例,手機可以按照品牌分,也可以按照存儲內存分。如果每種品牌每種內存都建立一個類的話,會急劇增加類的數量。

代碼

代碼以手機爲例,這裏的分類角度有品牌----小米、華爲,也有存儲空間----6G和8G。這裏根據品牌建立子類,然後將存儲空間作爲手機的屬性。

抽象手機類

public abstract class Phone  {
    protected Memory memory;

    public void setMemory(Memory memory) {
        this.memory = memory;
    }

    public abstract void buyPhone();
}

手機子類一

public class HuaWei extends Phone {
    @Override
    public void buyPhone() {
        System.out.println("購買了華爲手機,"+this.memory.addMemory());
    }
}

手機子類二

public class XiaoMi extends Phone {
    @Override
    public void buyPhone() {
        System.out.println("購買了小米手機,"+this.memory.addMemory());
    }
}

存儲空間

public interface Memory {
    String addMemory();
}

存儲空間具體類

public class Memory6G implements Memory {
    @Override
    public String addMemory() {
        return "添加6G內存";
    }
}

存儲空間具體類二

public class Memory8G implements Memory {
    @Override
    public String addMemory() {
        return "添加8G內存";
    }
}

客戶端

public class Client {
    public static void main(String[] args) {
        Phone huaWei = new HuaWei();
        huaWei.setMemory(new Memory6G());
        huaWei.buyPhone();
        huaWei.setMemory(new Memory8G());
        huaWei.buyPhone();

        Phone xiaoMi = new XiaoMi();
        xiaoMi.setMemory(new Memory6G());
        xiaoMi.buyPhone();
        xiaoMi.setMemory(new Memory8G());
        xiaoMi.buyPhone();
    }
}

特點

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