後端開發 設計模式 · 第 8 / 24 篇

橋接模式:抽象與實作分離

橋接模式 (Bridge Pattern) 將抽象與實作分離,讓兩者能獨立變化。透過 C# 遙控器與電視範例,了解如何降低耦合並提升擴充性。

哈囉大家~我們繼續來探索設計模式的世界吧!今天要介紹的是一個聽起來可能有點陌生,但其實很實用的設計模式:橋接模式(Bridge)。

🌟 橋接模式是什麼?

橋接模式將抽象部分和實作部分分離,讓它們可以獨立變化。想像遙控器與電視:不希望為每種遙控器和電視的組合都寫一次程式碼,這時就能運用橋接模式。


🤔 什麼時候適合用橋接模式?

  • 避免抽象和實作之間產生過多耦合。
  • 有多個維度需要獨立擴充。
  • 想降低程式複雜度,避免類別過多。

📺 C# 橋接模式範例

以「遙控器控制電視」為例說明。

📡 建立實作介面(電視)

/// <summary>
/// 電視實作介面
/// </summary>
public interface ITV
{
    void On();
    void Off();
    void SetChannel(int channel);
}

📺 建立具體實作

using System;

/// <summary>
/// Sony 電視
/// </summary>
public class SonyTV : ITV
{
    public void On() => Console.WriteLine("Sony 電視開機");
    public void Off() => Console.WriteLine("Sony 電視關機");
    public void SetChannel(int channel) => Console.WriteLine($"Sony 電視設定頻道:{channel}");
}

/// <summary>
/// Samsung 電視
/// </summary>
public class SamsungTV : ITV
{
    public void On() => Console.WriteLine("Samsung 電視開機");
    public void Off() => Console.WriteLine("Samsung 電視關機");
    public void SetChannel(int channel) => Console.WriteLine($"Samsung 電視設定頻道:{channel}");
}

🎛️ 建立抽象部分(遙控器)

/// <summary>
/// 遙控器抽象類別
/// </summary>
public abstract class RemoteControl
{
    protected ITV tv;

    protected RemoteControl(ITV tv)
    {
        this.tv = tv;
    }

    public abstract void TurnOn();
    public abstract void TurnOff();
    public abstract void SetChannel(int channel);
}

🎚️ 建立具體遙控器

/// <summary>
/// 一般遙控器
/// </summary>
public class BasicRemote : RemoteControl
{
    public BasicRemote(ITV tv) : base(tv) { }

    public override void TurnOn() => tv.On();
    public override void TurnOff() => tv.Off();
    public override void SetChannel(int channel) => tv.SetChannel(channel);
}

/// <summary>
/// 智慧型遙控器
/// </summary>
public class SmartRemote : RemoteControl
{
    public SmartRemote(ITV tv) : base(tv) { }

    public override void TurnOn()
    {
        Console.WriteLine("使用智慧型遙控器:");
        tv.On();
    }

    public override void TurnOff()
    {
        Console.WriteLine("使用智慧型遙控器:");
        tv.Off();
    }

    public override void SetChannel(int channel)
    {
        Console.WriteLine("使用智慧型遙控器設定頻道:");
        tv.SetChannel(channel);
    }
}

🚀 實際使用範例

using System;

class Program
{
    static void Main(string[] args)
    {
        ITV sonyTV = new SonyTV();
        ITV samsungTV = new SamsungTV();

        RemoteControl basicRemote = new BasicRemote(sonyTV);
        basicRemote.TurnOn();
        basicRemote.SetChannel(10);
        basicRemote.TurnOff();

        Console.WriteLine();

        RemoteControl smartRemote = new SmartRemote(samsungTV);
        smartRemote.TurnOn();
        smartRemote.SetChannel(5);
        smartRemote.TurnOff();
    }
}

🎯 執行結果

Sony 電視開機
Sony 電視設定頻道:10
Sony 電視關機

使用智慧型遙控器:
Samsung 電視開機
使用智慧型遙控器設定頻道:
Samsung 電視設定頻道:5
使用智慧型遙控器:
Samsung 電視關機

⚠️ 使用橋接模式注意事項

  • 優點:降低耦合,提升系統靈活度,方便擴充。
  • 缺點:初始設計較複雜,需要清楚區分抽象與實作。

🎉 結語

恭喜你又多認識了一個實用的設計模式:橋接模式(Bridge)!下一篇我們會繼續介紹更多好用的模式,敬請期待。

系列:

讀完了!你覺得這篇如何?

你的回饋會決定下一篇要寫什麼。

還有疑問

Learning path

設計模式

這篇是系列中的第 8 / 24 篇。可以順著列表補完整脈絡,也可以直接跳到需要的段落。

  1. 01 搞懂設計模式到底是什麼?
  2. 02 單例模式:只要一個就夠!
  3. 03 工廠方法模式:點披薩不用親自下廚
  4. 04 抽象工廠模式:系列產品輕鬆生產
  5. 05 原型模式:複製的藝術
  6. 06 建造者模式:一步步完成複雜任務
  7. 07 介面卡模式:讓不相容也能合作
  8. 08 橋接模式:抽象與實作分離 目前閱讀
  9. 09 組合模式:樹狀結構的好幫手
  10. 10 裝飾者模式:讓功能自由加點
  11. 11 外觀模式:化繁為簡
  12. 12 享元模式:節省記憶體的利器
  13. 13 代理模式:控制存取的守門員
  14. 14 責任鏈模式:層層把關的處理機制
  15. 15 命令模式:靈活封裝的請求指令
  16. 16 解譯器模式:讓程式聽懂你的指令
  17. 17 迭代器模式:輕鬆遍歷集合元素
  18. 18 中介者模式:管理複雜溝通的好幫手
  19. 19 備忘錄模式:保存與恢復物件狀態
  20. 20 觀察者模式:即時通知的好幫手
  21. 21 狀態模式:依狀態改變行為的祕訣
  22. 22 策略模式:靈活切換行為的好幫手
  23. 23 模板方法模式:固定流程靈活實作
  24. 24 訪問者模式:新增功能不動既有架構

Further reading

中介者模式:管理複雜溝通的好幫手 封面圖 2025-06-13 中介者模式:管理複雜溝通的好幫手 備忘錄模式:保存與恢復物件狀態 封面圖 2025-06-13 備忘錄模式:保存與恢復物件狀態 模板方法模式:固定流程靈活實作 封面圖 2025-06-13 模板方法模式:固定流程靈活實作

留言討論

用 GitHub 帳號留言,留言會同步到這個 Blog 的 GitHub Discussions。

閱讀導覽

約 2 分鐘

本篇所在系列 · 第 8 / 24 篇

設計模式

  1. 搞懂設計模式到底是什麼?
  2. 單例模式:只要一個就夠!
  3. 工廠方法模式:點披薩不用親自下廚
  4. 抽象工廠模式:系列產品輕鬆生產
  5. 原型模式:複製的藝術
  6. 建造者模式:一步步完成複雜任務
  7. 介面卡模式:讓不相容也能合作
  8. 橋接模式:抽象與實作分離
  9. 組合模式:樹狀結構的好幫手
  10. 裝飾者模式:讓功能自由加點
  11. 外觀模式:化繁為簡
  12. 享元模式:節省記憶體的利器
  13. 代理模式:控制存取的守門員
  14. 責任鏈模式:層層把關的處理機制
  15. 命令模式:靈活封裝的請求指令
  16. 解譯器模式:讓程式聽懂你的指令
  17. 迭代器模式:輕鬆遍歷集合元素
  18. 中介者模式:管理複雜溝通的好幫手
  19. 備忘錄模式:保存與恢復物件狀態
  20. 觀察者模式:即時通知的好幫手
  21. 狀態模式:依狀態改變行為的祕訣
  22. 策略模式:靈活切換行為的好幫手
  23. 模板方法模式:固定流程靈活實作
  24. 訪問者模式:新增功能不動既有架構
看完整系列 24 篇