1.橋接模式介紹
? ? ? ? 橋接模式(Bridge Pattern)也稱為橋梁模式,是七大結(jié)構(gòu)型設(shè)計(jì)模式之一。
2.橋接模式的定義
? ? ? ? 將抽象部分與實(shí)現(xiàn)部分分離,使它們可以獨(dú)立地進(jìn)行變化。
3.使用場景
? ? ? ? 1.任何多維變化類或者說多個樹狀類之間的耦合都可以使用橋接模式來實(shí)現(xiàn)解耦。
? ? ? ? 2.如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性,避免在兩個層次之間建立靜態(tài)的繼承關(guān)系,可以使用橋接模式使它們在抽象層建立一個關(guān)聯(lián)關(guān)系。
? ? ? ? 3.對于那些不希望使用繼承或因?yàn)槎鄬哟卫^承導(dǎo)致系統(tǒng)類的個數(shù)急劇增加的系統(tǒng),也可以考慮使用橋接模式。
? ? ? ? 4.一個類存在兩個獨(dú)立變化的維度,且這兩個維度都需要進(jìn)行擴(kuò)展。
4.UML類圖

5.角色介紹
1.Abstraction:抽象部分
????????該類保持有一個對實(shí)現(xiàn)部分對象的引用,抽象部分中的方法需要調(diào)用實(shí)現(xiàn)部分的對象來實(shí)現(xiàn),該類一般為抽象類。
2.RefinedAbstraction:優(yōu)化的抽象部分。
3.Implementor:實(shí)現(xiàn)部分
????????可以為接口或抽象類,其方法不一定要與抽象部分中的一致,一般情況下是由實(shí)現(xiàn)部分提供基本的操作,而抽象部分定義的則是基于實(shí)現(xiàn)部分這些基本操作的業(yè)務(wù)方法。
4.ConcreteImplementorA/ConcreteImplementorB實(shí)現(xiàn)部分的具體實(shí)現(xiàn)。
????????完善實(shí)現(xiàn)部分中方法定義的具體邏輯。
6.模板





7.例子







例子分析
????????為了增加奶茶的甜味種類,我們可以讓MilkTeaAdditives類變化起來,增加更多的子類,比如少糖,多糖等等。不管是MilkTea變化了還是MilkTeaAdditives變化了,其相對于對方而言都是獨(dú)立的沒有過多的交集,兩者之間唯一的聯(lián)系就是MilkTea中保持的對MilkTeaAdditives的引用,這是兩者之間的紐帶,這就是橋接模式
8.Android源碼中的橋接模式
????????橋接模式在Android應(yīng)用中應(yīng)用相當(dāng)廣泛,比如在View的視圖層級中,Button,TextView和View之間構(gòu)成一個繼承關(guān)系的視圖層級,每一層視圖都僅僅是對一種類型控件的描述,其定義了該類控件所擁有的基本屬性和行為,但是將他們真正會知道屏幕的部分是由與View相關(guān)的功能實(shí)現(xiàn)類DisplayList? HardwareLayer和Canvas負(fù)責(zé)。這兩部分之間的關(guān)系可以看作是對橋接模式的應(yīng)用。
????????進(jìn)行數(shù)據(jù)庫dao類設(shè)計(jì)有時也需要使用到橋接模式。
????????Android 應(yīng)用層和Native層之間的交互也是一個好例子。
9.總結(jié)
????????橋接模式優(yōu)點(diǎn)很明顯:分離抽象與實(shí)現(xiàn),靈活的擴(kuò)展以及對客戶來說透明的實(shí)現(xiàn)。
????????橋接模式缺點(diǎn)就是抽象和實(shí)現(xiàn)的分離不好把握,不容易設(shè)計(jì)。