橋接設計模式:
- 結構型設計模式
- 將抽象部分與它實現部分離,使它們都可以獨立地變化
- 通俗來說,是通過組合來橋接其它的⾏為/維度
應用場景:
- 系統需要在構件的抽象化⻆色和具體化⻆色之間增加更多的靈活性
- 不想使用繼承導致系統類的個數急劇增加的系統
- 有時候一個類,可能會擁有多個變化維度,⽐如啤酒,有不同的容量和品牌,可以使用繼承組合的⽅式進行開發,假如維度很多,就容易易出現類的膨脹,使用橋接模式就可以解決這個問題,且解耦
業務背景:
- 手機可以從兩個維度進行變化,一個是品牌,一個是內存.此時我們就可以通過橋接模式將這兩個維度分離開來,每一個維度都可以獨立擴展.比如說手機品牌,蘋果、三星、鎚子等等.內存方面又可以生產10G、16G等等.從專業的角度來看可以這樣定義橋接模式.
橋接模式圖:

核心組成:
- client:指的是我們買手機的人
- Abstraction(抽象類):指的是手機抽象類
- Refined Abstraction(具體類):指的是具體手機品牌
- Implementor:在這裡相當於手機的其他組件,內存
- ConcreteImplementor:具體的內存型號.
實現步驟:
- 定義Implementor,這裡定義手機內存接口
public interface Memory {
public void addMemory();
}
- 定義ConcreteImplementor,這裡指具體的內存
public class Memory6G implements Memory {
@Override
public void addMemory() {
System.out.println("6G內存");
}
}
public class Memory8G implements Memory {
@Override
public void addMemory() {
System.out.println("8G內存");
}
}
- 定義Abstraction手機抽象類
public abstract class Phone {
public Memory memory;
public void setMemory(Memory memory) {
this.memory = memory;
}
public abstract void buyPhone();
}
- 定義Refined Abstraction(具體的手機品牌)
public class HuaWei extends Phone {
@Override
public void buyPhone() {
System.out.println("購買de華為手機-");
memory.addMemory();
}
}
public class XiaoMi extends Phone {
@Override
public void buyPhone() {
System.out.println("購買de小米手機-");
memory.addMemory();
}
}
- 上下文應用
public class BridgeContext {
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();
}
}
橋接模式的優點:
- 抽象和實現的分離.
- 優秀的擴展能⼒,符合開閉原則
橋接模式的缺點:
- 增加系統的理解與設計難度
- 使用聚合關聯關係建立在抽象層,要求開發者針對抽象 進⾏設計與編程,比如抽象類汽車,⾥面聚合了顏⾊類,有點像對象適配器
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/219148.html