橋接模式:將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化。它是一種對象結(jié)構(gòu)型模式,又稱為柄體(Handle and Body)模式或接口(Interface)模式。橋接模式是一個非常有用的模式君躺,也非常復(fù)雜,它很好的符合了開放-封閉原則和優(yōu)先使用對象开缎,而不是繼承這兩個面向?qū)ο笤瓌t棕叫。
具體實現(xiàn)(ConcreteImplementor):實現(xiàn)Implementor。
抽象(Abstraction):定義抽象接口奕删,該接口中包含實現(xiàn)具體行為俺泣、具體特征的Implementor接口。
提煉的抽象(RefinedAbstraction):繼承自Abstraction的子類,依舊是一個抽象的事物名伏钠。
實現(xiàn)(Implementor):定義具體行為横漏,具體特征的應(yīng)用接口。
缺點:但是我們說這樣的設(shè)計是脆弱的贝润,仔細分析就可以發(fā)現(xiàn)绊茧,它還是存在很多問題,首先它在遵循開放-封閉原則的同時打掘,違背了類的單一職責原則华畏,即一個類只有一個引起它變化的原因,而這里引起變化的原因卻有兩個尊蚁,即路類型的變化和汽車類型的變化亡笑;其次是重復(fù)代碼會很多,不同的汽車在不同的路上行駛也會有一部分的代碼是相同的横朋;再次是類的結(jié)構(gòu)過于復(fù)雜仑乌,繼承關(guān)系太多,難于維護琴锭,最后最致命的一點是擴展性太差晰甚。如果變化沿著汽車的類型和不同的道路兩個方向變化,我們會看到這個類的結(jié)構(gòu)會迅速的變龐大决帖。
適用性:在以下的情況下應(yīng)當使用橋接模式:
1.如果一個系統(tǒng)需要在構(gòu)件的抽象化角色和具體化角色之間增加更多的靈活性厕九,避免在兩個層次之間建立靜態(tài)的聯(lián)系。
2.設(shè)計要求實現(xiàn)化角色的任何改變不應(yīng)當影響客戶端地回,或者說實現(xiàn)化角色的改變對客戶端是完全透明的扁远。
3.一個構(gòu)件有多于一個的抽象化角色和實現(xiàn)化角色,系統(tǒng)需要它們之間進行動態(tài)耦合刻像。
4.雖然在系統(tǒng)中使用繼承是沒有問題的畅买,但是由于抽象化角色和具體化角色需要獨立變化,設(shè)計要求需要獨立管理這兩者细睡。