0x01 背景
當(dāng)一個(gè)類存在一個(gè)(或多個(gè))變化的維度時(shí)郭计,如果采用繼承的方式來(lái)定義不同的實(shí)現(xiàn),會(huì)導(dǎo)致實(shí)現(xiàn)類數(shù)量呈指數(shù)爆炸播聪,比如對(duì)于畫布來(lái)說(shuō)朽基,形狀上有三種:正方形、長(zhǎng)方形离陶、圓形稼虎,顏色上有三種顏色:紅色,藍(lán)色招刨、綠色霎俩。一共有3 * 3 =9種畫布,如果采用繼承的方式來(lái)實(shí)現(xiàn)具體的畫布類,則有9種畫布類打却,而且每添加一種形狀(如橢圓)畫布杉适,需要實(shí)現(xiàn)所有顏色的橢圓形畫布類,類似的每添加一種顏色柳击,就需要實(shí)現(xiàn)該顏色的所有形狀的畫布類淘衙,這樣會(huì)導(dǎo)致類個(gè)數(shù)的指數(shù)爆炸。橋接模式就是為了這樣的問(wèn)題腻暮。
0x02 橋接模式
- 將抽象和實(shí)現(xiàn)解耦彤守,讓他們可以獨(dú)立變化
- 一個(gè)類存在兩個(gè)(或多個(gè))獨(dú)立變化的維度,我們可以通過(guò)組合的方式哭靖,讓這兩個(gè)(或多個(gè))維度可以獨(dú)立進(jìn)行擴(kuò)展
- 通過(guò)組合關(guān)系代替繼承關(guān)系具垫,避免繼承層次的指數(shù)級(jí)爆炸。
橋接模式遵循“組合優(yōu)于繼承”的設(shè)計(jì)原則
2.1 橋接模式的UML類圖
橋接模式將形狀和顏色這兩個(gè)不同的變化維度拆分開:AbstractShap(抽象類)和Color(接口)试幽,讓這兩種維度獨(dú)立變化筝蚕,然后通過(guò)組合的方式將這兩種維度組合在一起,所以最終類的個(gè)數(shù)只有:形狀個(gè)數(shù) + 顏色個(gè)數(shù)铺坞。
2.2 橋接模式的應(yīng)用場(chǎng)景
當(dāng)一個(gè)類存在兩個(gè)(或多個(gè))獨(dú)立變化的維度時(shí)起宽,可以將兩個(gè)(或多個(gè))維度拆分開獨(dú)立變化,然后通過(guò)組合的方式進(jìn)行擴(kuò)展济榨。