天天看點

7.橋接模式(Bridge Pattern)

橋接模式

我們在用畫筆畫畫的時候可以發現,畫筆的種類有很多種,粗筆刷,細筆刷,以及硬筆刷,軟筆刷等等,顔色也有很多種,紅的,藍色,綠的,紫的等等,那他們的組合就是 m*n,像這樣多個次元都可以變化的例子還有很多,不同大小,顔色,字型的文字等等。若把每一種情況都單獨寫出來的話,工作量異常龐大,是以對于這種情況,用橋接模式就可以很好的實作。

意圖:将抽象部分與實作部分分離,使它們都可以獨立的變化。
7.橋接模式(Bridge Pattern)

在類圖中我們可以看到,把

Color

PaintBrush

都改成抽象類,其他的相關的子類,繼承自抽象類,而如果想要用細筆刷畫畫,則直接執行個體化一個具體的顔色,在執行個體化一個細筆刷,把顔色傳遞到細筆刷即可。

橋接(Bridge)模式的優點是:

  • 抽象與實作分離,擴充能力強
  • 符合開閉原則
  • 符合合成複用原則
  • 其實作細節對客戶透明

缺點是:

  • 由于聚合關系建立在抽象層,要求開發者針對抽象化進行設計與程式設計,能正确地識别出系統中兩個獨立變化的次元,這增加了系統的了解與設計難度。

完整代碼如下。

using System;

namespace _07_Bridge
{
    /// <summary>
    /// 橋接模式
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            Color c = new Red();
            PaintBrush thinBrush = new ThinBrush(c);  //顔色通過構造函數傳入
            thinBrush.Draw();
            Console.WriteLine();
        }
    }
    //抽象類,塗顔色
    abstract class Color
    {
        public abstract void Colour();
    }
    //紅色類,塗顔色的實作
    class Red : Color
    {
        public override void Colour()
        {
            Console.WriteLine("Red color....");
        }
    }
    //抽象類,畫畫
    abstract class PaintBrush
    {
        protected Color color;
        public PaintBrush(Color c)
        {
            color = c;
        }
        public abstract void Draw();
    }
    //中等筆刷畫畫的實作
    class MediumBrush:PaintBrush
    {
        public MediumBrush(Color c):base(c)
        {

        }
        public override void Draw()
        {
            Console.WriteLine("Medium line");
            color.Colour();
        }
    }
    //細筆刷畫畫的實作
    class ThinBrush : PaintBrush
    {
        public ThinBrush(Color c) : base(c)
        {

        }
        public override void Draw()
        {
            Console.WriteLine("Thin line");
            color.Colour();
        }
    }
}

           

繼續閱讀