橋接模式

定義

如果軟件系統(tǒng)中某個類存在兩個獨(dú)立變化的維度,通過該模式可以將這兩個維度分離出來,使兩者可以獨(dú)立擴(kuò)展,讓系統(tǒng)更加符合“單一職責(zé)原則”。與多層繼承方案不同,它將兩個獨(dú)立變化的維度設(shè)計(jì)為兩個獨(dú)立的繼承等級結(jié)構(gòu), 并且在抽象層建立一個抽象關(guān)聯(lián),該關(guān)聯(lián)關(guān)系類似一條連接兩個獨(dú)立繼承結(jié)構(gòu)的橋,故名橋接模式。

UML類圖
image.png
角色和職能
  • Abstract(抽象類):用于定義抽象類的接口,它一般是抽象類而不是接口,其中定義了 一個Implementor(實(shí)現(xiàn)類接口)類型的對象并可以維護(hù)該對象,它與Implementor之間具有關(guān) 聯(lián)關(guān)系,它既可以包含抽象業(yè)務(wù)方法,也可以包含具體業(yè)務(wù)方法。
  • RefinedAbstraction(擴(kuò)充抽象類):擴(kuò)充由Abstraction定義的接口,通常情況下它不再是抽象類而是具體類,它實(shí)現(xiàn)了在Abstraction中聲明的抽象業(yè)務(wù)方法,在RefinedAbstraction中可以 調(diào)用在Implementor中定義的業(yè)務(wù)方法。
  • Implementor(實(shí)現(xiàn)類接口):定義實(shí)現(xiàn)類的接口,這個接口不一定要與Abstraction的接口完 全一致,事實(shí)上這兩個接口可以完全不同,一般而言,Implementor接口僅提供基本操作,而 Abstraction定義的接口可能會做更多更復(fù)雜的操作。Implementor接口對這些基本操作進(jìn)行了聲 明,而具體實(shí)現(xiàn)交給其子類。通過關(guān)聯(lián)關(guān)系,在Abstraction中不僅擁有自己的方法,還可以調(diào) 用到Implementor中定義的方法,使用關(guān)聯(lián)關(guān)系來替代繼承關(guān)系。
  • ConcreteImplementor(具體實(shí)現(xiàn)類):具體實(shí)現(xiàn)Implementor接口,在不同的 ConcreteImplementor中提供基本操作的不同實(shí)現(xiàn),在程序運(yùn)行時,ConcreteImplementor對象將 替換其父類對象,提供給抽象類具體的業(yè)務(wù)操作方法。
思考流程
  • 識別出一個類所具有的兩個獨(dú)立變化的維度,將他們設(shè)計(jì)為兩個獨(dú)立的繼承等級結(jié)構(gòu),為兩個維度都提供抽象層。
  • 通常情況下,我們將具有兩個獨(dú)立變化維度的類的一些普通業(yè)務(wù)方法和與之關(guān)系最密切的維度設(shè)計(jì)為“抽象類”層次結(jié)構(gòu)(抽象部分),而將另一個維度設(shè)計(jì)為“實(shí)現(xiàn)類”層次結(jié)構(gòu)(實(shí)現(xiàn)部分)。(例如: 對于毛筆而言,由于型號是其固有的維度,因此可以設(shè)計(jì)一個抽象的毛筆類,在該類中聲明 并部分實(shí)現(xiàn)毛筆的業(yè)務(wù)方法,而將各種型號的毛筆作為其子類;顏色是毛筆的另一個維度, 由于它與毛筆之間存在一種“設(shè)置”的關(guān)系,因此我們可以提供一個抽象的顏色接口,而將具體 的顏色作為實(shí)現(xiàn)該接口的子類。)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容