設計模式系列
目的:將相關實作與抽象分離出來,讓兩者各自演進。
比較典型的生活例子就是:一個開關控制冷氣、電風扇、電燈、電視,都是橋接的例子。
開關的目的是將裝置開啟或關閉。
簡易例子如下:
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.非常要求相關實作與抽象獨立變化,也需要一定經驗累積去區別出來。
元哥的筆記