橋接模式(bridge pattern)
定義:將抽象部分與它的實現部分分離,使他們都可以獨立地變化
橋接模式使用一種巧妙的方式處理多層繼承存在的問題,用抽象關聯來取代傳統的多層繼承,將類之間的靜態繼承關系轉變為動態的組合關系,使得系統更加靈活,并易于擴展,有效的控制了系統中的類的個數(避免了繼承層次的指數級爆炸),將兩個獨立變化的維度進行解耦,而不是將兩者耦合在一起,形成多層繼承結構
橋接(Bridge)模式包含以下主要角色:
抽象化(Abstraction)角色 :主要負責定義出該角色的行為 ,并包含一個對實現化對象的引用。
擴展抽象化(RefinedAbstraction)角色 :是抽象化角色的子類,實現父類中的業務方法,并通過組合關系調用實現化角色中的業務方法。
實現化(Implementor)角色 :定義實現化角色的接口,包含角色必須的行為和屬性,并供擴展抽象化角色調用。
具體實現化(Concrete Implementor)角色 :給出實現化角色接口的具體實現。

應用場景:
1.需要提供平臺獨立性的應用程序時。比如,不同數據庫的JDBC驅動程序、硬盤驅動程序等
2.需要在某種統一協議下增加更多組件時。比如支付場景中,我們期望支持微信、支付寶、各大銀行的支付組件等。這里的統一協議是收款、支付、扣款,而組件就是微信、支付寶等
3.基于消息驅動的場景。雖然消息的行為比較統一,主要包括發送、接收、處理和回值,但其實具體客戶端的實現通常卻各不相同,比如,手機短信,郵件消息,QQ消息,微信消息等
4.拆分復雜的類對象時。當一個類中包含大量對象和方法時,既不方便閱讀,也不方便修改
5.希望從多個維度上擴展時。比如,系統功能性和非功能性角度,業務或技術角度等
總結:
優點:
1.分離了抽象接口及其實現部分,橋接模式使用“對象間的關聯關系”解耦了抽象和實現之間固有的綁定關系,使得抽象和實現可以沿著各自的維度來變化
2.在很多情況下,橋接模式可以取代多層繼承方案(多層繼承方案違背了單一職責原則,復用性差,類的個數多),橋接模式很好的解決了這些問題
3.橋接模式提高了系統的擴展性,在兩個變化維度中任意擴展一個維度都不需要修改原有的系統,符合開閉原則
缺點:
1.橋接模式的使用會增加系統的理解和設計難度,由于關聯關系建立在抽象層,要求開發者一開始就對抽象層進行設計和編程
2.橋接模式要求正確識別出系統中的兩個獨立變化的維度,因此具有一定的局限性,并且如果正確的進行維度的劃分,也需要相當豐富的經驗
浙公網安備 33010602011771號