菜鳥學設計模式系列筆記之Bridge模式

“依賴倒置原則”:抽象不應該依賴於實現細節,實現細節應該依賴於抽象

Intent :將抽象部分與它的實現部分分離,使它們都可以獨立第變化

Motivation:

(1)要做到“抽象(接口)與實現分離”,最常用的方法是定義一個抽象類,然後在子類中提供實現。

也就是說用繼承機制達到“抽象(接口)與實現分離

(2)但是這種方法不夠靈活,繼承機制把實現與抽象部分永久地綁定起來,要想獨立地修改、擴展、重用抽象(接口)與實現都非常困難



Abstraction 定義抽象類的接口;維護一個指向Implementor類型對象的指針

RefinedAbstraction 擴充由Abstraction 定義的接口

Implementor 定義實現類的接口,不一定要與Absrtraction的接口完全一致,甚至可以完全不同的

ConcreteImplementor 實現Implementor接口並定義它的具體實現 


分離接口及其實現部分。抽象類的實現可以在運行時刻進行配置,一個對象甚至可以在運行時刻改變它的實現

提高可擴充性:抽象與實現兩部分可以單獨擴充

實現細節對客戶透明


一般來說,一個繼承結構中的第一層是抽象角色,封裝了抽象的商業邏輯,這是系統中不變的部分;

第二層是實現角色,封裝了設計中會變化的因素。這個實現允許實現化角色有多態性變化


使用兩個獨立的等級結構封裝兩個獨立的變化因素,並在它們之間使用聚合關係,以達到功能複合的目的。使用橋接模式。抽象化與實現化的變化分別得到封裝之後,使用聚合關係聯繫抽象化角色和實現化角色


一個好的設計通常沒有多於兩層的繼承等級結構。如果出現兩個以上的變化因素,就需要找出哪一個因素是靜態的,可以使用繼承關係;哪一個動態的,必須使用聚合關係;橋接模式是“對變化的封裝”原則以及合成、聚合複用原則的極好例子



(1)Bridge 模式使用“對象間的組合對象”解耦了抽象和實現之間固有的綁定關係,使得抽象和實現可以沿着各自的維度來變化

(2)抽象和實現沿着各自的維度變化,即“子類化”它們,得到不同的子類後,便可以任意組合它們

(3)Bridge模式有時類似於多繼承方案,但是多繼承方案往往違背單一職責原則,複用性較差。

(4)Bridge 模式應用一般在兩個非常強的變化維度,有時應用中即使有兩個變化的維度,但在某個方向的變化維度並不劇烈——即兩個變化不會導致縱橫交錯的結果,並不一定使用bridge模式


Abstract Factory可以用來創建和配置Bridge模式

與Adapter模式的區別:

Adapter模式用來幫助無關的類協同工作,通常在系統設計完成之後纔會被使用

Bridge模式則在系統開始時就被使用,他使得抽象接口和實現部分可以獨立進行改變



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章