iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

前言


今天最感動的是我實習的training終於完成了~~🥳
這也代表我要開始碰到正式專案了😶‍🌫️

定義


Bridge is a structural design pattern that lets you split a large class or a set of closely related classes into two separate hierarchies—abstraction and implementation—which can be developed independently of each other.
Refactoring Guru

橋接模式是一種結構式模式,它允許你將一個大型類別或一組密切相關的類別分為兩個獨立的層次結構——抽象層實作層,這兩者可以獨立地進行開發而互不影響。

下圖是Refactoring Guru清楚明瞭的示意圖~~
Refactoring Guru

延伸上圖,來更深入解釋一下什麼是橋接模式!

舉例


我們繼續用電視機還有遙控器來舉例:

假設今天有兩個牌子的電視機,
分別為紅牌和藍牌,

如下圖,左側框框為抽象部分,
我想打開電視關閉電視
那麼在這裡我可以使用遙控器來打開/關閉電視。
而實際的電視打開以及關閉,將會由電視那方來完成,
也就是說,開/關的實作會由電視實作層來實現!

因此,在這種情況下,紅牌電視或藍牌電視將實作打開或關閉的功能。
所以抽象部分將使用其中一個實作來打開或關閉電視。

C#實作


首先我們先建立一個電視開關的介面

// 實現部分的介面
interface ITV
{
    void TurnOn();
    void TurnOff();
}

接著我們建立紅牌電視和藍牌電視的具體類別

// 具體的實作類別1 - RedTV
class RedTV : ITV
{
    public void TurnOn()
    {
        Console.WriteLine("RedTV is ON");
    }

    public void TurnOff()
    {
        Console.WriteLine("RedTV is OFF");
    }
}

// 具體的實作類別2 - BlueTV
class BlueTV : ITV
{
    public void TurnOn()
    {
        Console.WriteLine("BlueTV is ON");
    }

    public void TurnOff()
    {
        Console.WriteLine("BlueTV is OFF");
    }
}

再來,我們建立一個抽象遙控器控制

class RemoteControl : IRemoteControl
{
    protected ITV tv;

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

    public virtual void TurnOn()
    {
        tv.TurnOn();
    }

    public virtual void TurnOff()
    {
        tv.TurnOff();
    }
}

最後是客戶端~

class Program
{
    static void Main(string[] args)
    {
        ITV redTV = new RedTV();
        ITV blueTV = new BlueTV();

        IRemoteControl remote1 = new RemoteControl(redTV);
        IRemoteControl remote2 = new RemoteControl(blueTV);

        remote1.TurnOn();
        remote1.TurnOff();

        remote2.TurnOn();
        remote2.TurnOff();
    }
}

output~


上一篇
[Day12] Design Pattern - Adapter轉接器模式
下一篇
[Day14] Design Pattern - Composite組合模式
系列文
Design Pattern - 無所不在的設計模式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言