橋接模式-Bridge Pattern

設計模式系列

目的:將相關實作與抽象分離出來,讓兩者各自演進。

比較典型的生活例子就是:一個開關控制冷氣、電風扇、電燈、電視,都是橋接的例子。

開關的目的是將裝置開啟或關閉。

簡易例子如下:

    class Program
    {
        static void Main(string[] args)
        {
            Abstraction ab = new Abstraction();
            ab.Implementor = new ConcreateImplemetorA();
            ab.Operation();

            ab.Implementor = new ConcreateImplemetorB();
            ab.Operation();
            Console.ReadKey();
        }
    }
    class Abstraction
    {
        protected Implementor implementor;

        public Implementor Implementor
        {
            set { implementor = value; }
        }

        public virtual void Operation()
        {
            implementor.Operation();
        }
    }

    abstract class Implementor
    {
        public abstract void Operation();
    }

    class RefinedAbstraction : Abstraction
    {
        public override void Operation()
        {
            implementor.Operation();
        }
    }

    class ConcreateImplemetorA : Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("ConcreateImplementorA.Operation");
        }
    }
    class ConcreateImplemetorB : Implementor
    {
        public override void Operation()
        {
            Console.WriteLine("ConcreateImplementorB.Operation");
        }
    }


橋接模式職責如下:

抽象化(Abstraction)角色
:抽象化給出的定義,並保存一個對實體物件的引用。

修正抽象化(Refined Abstraction)角色:擴展抽象化角色,改變和修正老爸對抽象化的定義。

實現化(Implementor)角色:這個角色給出實現化角色的介面,但不給出具體的實現。必須指

出的是,這個介面不一定和抽象化角色的介面定義相同,實際上,這兩個介面可以非常不一樣。

實現化角色應當只給出底層操作,而抽象化角色應當只給出基於底層操作的更高一層的操作。

具體實現化(Concrete Implementor)角色:這個角色給出實現化角色介面的具體實作。

優點:
1.解耦了抽象和實現之間的耦合關系,使得抽象和實現可以沿著各自的職責來變化。
2.橋接模式可以取代多層繼承,多層繼承偉反SRP原則,類別的數量也非常多,重複用較差。
3.此模式提高系統可擴展性,從簡單的範例當中,可以擴展,不需要員改原有的程式,符合OCP原則。

缺點:
1.增加系統理解與設計難度
2.非常要求相關實作與抽象獨立變化,也需要一定經驗累積去區別出來。

 

元哥的筆記