問題場景:
現在的手機有很多不同的品牌,樣式也各種各樣,什麼水滴屏,劉海屏,挖孔屏,什麼華為,vivo,小米等等。如果我們基于繼承關系來設計的話,你就會發現這個時候有點無從下手了。

當然這個圖的設計是不合理的,你也可以試着将不同的屏再抽象下,但是發現還是不是很合理,而且即使實作了要擴充的話很是麻煩。這個時候我們就可以引入橋接模式。
橋接模式的主要特點就是把抽象化與行為實作解耦,使得二者可以獨立變化。
在有多種可能會變化的情況下,用繼承會造成類爆炸問題,擴充起來不靈活,就像上述場景,手機廠家有多個,手機螢幕也是多元化的。
比如上訴問題,我們這樣來設計
打電話的行為提取一個接口出來,手機提取一個抽象出來,在抽象(Phone)裡面去聚合行為(Brand),這個過程就像搭了個橋把抽象與行為連接配接起來。當然這樣也把抽象和行為分離開來了,可以獨立擴充,如果我要新增一個折疊屏的,隻需要在抽象這邊加一個類就OK,如果需要擴充手機品牌,隻需要在接口實作那邊加個小米就可以了,二者可以獨立變化,提高系統的靈活性。
行為側:
接口:
|
接口實作:
|
抽象:
抽象類:
|
子類:
|
測試:
|
使用橋接模式需要找到合适的抽象與行為進行分離,它可以替代使用繼承出現的多層繼承或者接口的多實作情況,降低系統的管理和維護成本。但是會增加系統的了解和設計難度。
JDBC驅動就是一個橋接模式的應用,通過DriverManager去聚合Connection實作搭橋,DriverManager通過配置去看是mysql或者是oracle等。各種武功變化萬千,為武功心法不變,橋接模式中,抽象不一定非得是抽象類,行為也不一定非要抽取一個接口出來,就像JDBC這個,心法是一樣,打出來的招式卻有些變化。還有銀行轉賬也是一個場景,不同使用者可以通過不同方式轉賬。使用者:普通使用者,黃金使用者,白金使用者...,轉賬方式:網銀轉賬 ,櫃台轉賬,ATM轉賬,第三方支付轉賬...
轉載自:https://www.cnblogs.com/nijunyang/p/11565760.html