橋接模式就是把事物和其具體實現分開,使他們可以各自獨立的變化。橋接的用意是:將抽象化與實現化解耦,使得二者可以獨立變化,像我們常用的JDBC橋DriverManager一樣,JDBC進行連接數據庫的時候,在各個數據庫之間進行切換,基本不需要動太多的代碼,甚至絲毫不用動,原因就是JDBC提供統一接口,每個數據庫提供各自的實現,用一個叫做數據庫驅動的程序來橋接就行了。我們來看看關係圖:
實現代碼:
先定義接口:
定義一個橋,持有Sourceable的一個實例:
測試類:
public class BridgeTest {
public static void main(String[] args) {
Bridge bridge = new MyBridge();
/*調用第一個對象*/
Sourceable source1 = new SourceSub1();
bridge.setSource(source1);
bridge.method();
/*調用第二個對象*/
Sourceable source2 = new SourceSub2();
bridge.setSource(source2);
bridge.method();
}
}
output:
this is the first sub!
this is the second sub!
這樣,就通過對Bridge類的調用,實現了對接口Sourceable的實現類SourceSub1和SourceSub2的調用。接下來我再畫個圖,大家就應該明白了,因爲這個圖是我們JDBC連接的原理,有數據庫學習基礎的,一結合就都懂了。
如有轉載,請說明出處:http://blog.csdn.net/zhangerqing
橋接模式跟裝飾者模式實現方式上很像:
橋接模式是適應多個維度變化的一種模式,比如一個日誌類,它面向多個平臺,這是一種變化,記錄日誌的手段不同(json或xml或特定格式),這又是一種變化.橋接模式就是在於利用對象的組合將這兩個維度上的變化分開,比如不同平臺的實現方式可以成爲一個被組合的成員對象,向上提供接口,而不同手段的變化則體現在子類上.
裝飾模式是適應新需求的不斷增加的一種模式,在.net中的典型應用就是stream,對於一個stream類要求它增加一個緩存的功能,又要求它再增加一個加密的功能,這一個又一個新增的功能就像是一個個新的裝飾品.以stream爲例,該模式實現的要點在於利用對象的組合將stream作爲一個成員對象,再新增成員函數來實現緩存,然後再以這個新對象作爲成員對象,新增成員函數來實現加密,這樣新的對象就既有緩存又有加密的功能了,避免了類爆炸,一層一層地嵌套,