bridge(橋接)——物件結構型模式
1.意圖
將抽象部分與它的實現部分分離,使他們都可以獨立的變化
2.別名
handle/body
3.動機
當乙個抽象可以有多個實現時,通常用繼承來協調他們。抽象類定義對該抽象的介面,而具體的子類則用不同方式加以實現。
但是此方法有時候不夠靈活,繼承機制將抽象部分和實現部分固定在一起,難以獨立進行修改擴充和重用。
bridge將抽象和實現分開,在中間起到了橋梁的作用,使他們可以獨立變化。
4.適用性
1)你不希望在抽象和實現部分之間有乙個固定的繫結關係,在程式執行時刻實現部分應該可以被選擇或者切換。
2)類的抽象以及他的實現部分都應該可以通過生成子類的方法加以擴充。
3)對乙個抽象的實現部分的修改應該對客戶不產生影響,即客戶的**不需要重新編譯。
4)(c++)你想對客戶完全隱藏抽象的實現部分,在c++中,類的表示在類介面中是可以看見的。
5)有很多累要生成,這種類層次結構說明需要將物件分解
6)你想在多個物件間共享實現,但是要求客戶並不知道這一點
5.結構
參考:6.參與者
abstraction
定義抽象類的介面
維護乙個紙箱implementor型別物件的指標
refinedabstraction
擴充由abstraction定義的介面
implementor
定義實現類的介面,該介面不一定要與abstraction完全一致,事實上這兩個介面可以完全不同。一般來講,implementor介面僅僅提供基本操作,而abstraction定義了基於這些基本操作的較高層次的操作。
concreteimplementor
實現implementor的介面並定義它的具體實現
7.協作
abstraction將client的請求**給它的implementor物件
8.效果
1)分離介面及其實現部分
有助於降低對實現部分編譯時刻的依賴性。有助於分層,產生更好的結構化系統。
2)提高可擴充性
可以獨立地對兩個層次結構進行擴充
3)實現細節對客戶透明
9.實現
1)僅有乙個implementor
在僅有乙個實現的時候,沒有必要建立乙個抽象的implementor類,這是乙個bridge模式的退化情況。在abstraction和implementor之間有一種一對一的關係。
2)建立正確的implementor物件
3)共享implementor物件
4)採用多重繼承機制
10.**實現
#includeusingnamespace
std;
class
abstractcar;};
class bus:public
abstractcar
};class car:public
abstractcar
};class
abstractload
abstractcar *abc;
};class countryload:public
abstractload
};class highway:public
abstractload
};int
main()
11.相關模式
abstractfactory模式可以用來建立和配置乙個特定的bridge模式
adapter模式用來幫助無關的類協同工作,通常在系統設計完之後才會被使用。而bridge模式則是在系統開始時就被使用,他使抽象介面和實現部分可以獨立進行改變
設計模式 橋接模式 Bridge
開啟銀行賬戶,顯示是哪個銀行的,賬戶型別是什麼 這裡給bank增加兩個實現類,乙個工商銀行,乙個農業銀行,給account也增加兩個實現類,乙個定期存款賬戶,乙個活期存款賬戶,詳細 如下 account介面 賬戶介面 author 七夜雪 create 2018 11 23 20 49 public...
設計模式 橋接模式Bridge
前言 模式總覽 by xingoo 這個模式使用的並不多,但是思想確實很普遍。就是要分離抽象部分與實現部分。實現弱關聯,即在執行時才產生依賴關係。降低 之間的耦合。abstraction 抽象部分的基類,定義抽象部分的基礎內容。refinedabstraction 抽象部分的擴充,用於對基類的內容補...
設計模式 橋接模式Bridge
前言 模式總覽 by xingoo 這個模式使用的並不多,但是思想確實很普遍。就是要分離抽象部分與實現部分。實現弱關聯,即在執行時才產生依賴關係。降低 之間的耦合。abstraction 抽象部分的基類,定義抽象部分的基礎內容。refinedabstraction 抽象部分的擴充,用於對基類的內容補...