處理多維度變化——橋接模式(四)

Liuwei-Sunny發表於2012-04-16

10.4 介面卡模式與橋接模式的聯用

        在軟體開發中,介面卡模式通常可以與橋接模式聯合使用。介面卡模式可以解決兩個已有介面間不相容問題,在這種情況下被適配的類往往是一個黑盒子,有時候我們不想也不能改變這個被適配的類,也不能控制其擴充套件。介面卡模式通常用於現有系統與第三方產品功能的整合,採用增加介面卡的方式將第三方類整合到系統中。橋接模式則不同,使用者可以通過介面繼承或類繼承的方式來對系統進行擴充套件。

        橋接模式和介面卡模式用於設計的不同階段,橋接模式用於系統的初步設計,對於存在兩個獨立變化維度的類可以將其分為抽象化和實現化兩個角色,使它們可以分別進行變化;而在初步設計完成之後,當發現系統與已有類無法協同工作時,可以採用介面卡模式。但有時候在設計初期也需要考慮介面卡模式,特別是那些涉及到大量第三方應用介面的情況。

        下面通過一個例項來說明介面卡模式和橋接模式的聯合使用:

        在某系統的報表處理模組中,需要將報表顯示和資料採集分開,系統可以有多種報表顯示方式也可以有多種資料採集方式,如可以從文字檔案中讀取資料,也可以從資料庫中讀取資料,還可以從Excel檔案中獲取資料。如果需要從Excel檔案中獲取資料,則需要呼叫與Excel相關的API,而這個API是現有系統所不具備的,該API由廠商提供。使用介面卡模式和橋接模式設計該模組。

        在設計過程中,由於存在報表顯示和資料採集兩個獨立變化的維度,因此可以使用橋接模式進行初步設計;為了使用Excel相關的API來進行資料採集則需要使用介面卡模式。系統的完整設計中需要將兩個模式聯用,如圖10-6所示:

 10.5 橋接模式總結

        橋接模式是設計Java虛擬機器和實現JDBC等驅動程式的核心模式之一,應用較為廣泛。在軟體開發中如果一個類或一個系統有多個變化維度時,都可以嘗試使用橋接模式對其進行設計。橋接模式為多維度變化的系統提供了一套完整的解決方案,並且降低了系統的複雜度。

1.主要優點

        橋接模式的主要優點如下:

        (1)分離抽象介面及其實現部分。橋接模式使用“物件間的關聯關係”解耦了抽象和實現之間固有的繫結關係,使得抽象和實現可以沿著各自的維度來變化。所謂抽象和實現沿著各自維度的變化,也就是說抽象和實現不再在同一個繼承層次結構中,而是“子類化”它們,使它們各自都具有自己的子類,以便任何組合子類,從而獲得多維度組合物件。

        (2)在很多情況下,橋接模式可以取代多層繼承方案,多層繼承方案違背了“單一職責原則”,複用性較差,且類的個數非常多,橋接模式是比多層繼承方案更好的解決方法,它極大減少了子類的個數。

        (3)橋接模式提高了系統的可擴充套件性,在兩個變化維度中任意擴充套件一個維度,都不需要修改原有系統,符合“開閉原則”。

2.主要缺點

        橋接模式的主要缺點如下:

        (1)橋接模式的使用會增加系統的理解與設計難度,由於關聯關係建立在抽象層,要求開發者一開始就針對抽象層進行設計與程式設計。

        (2)橋接模式要求正確識別出系統中兩個獨立變化的維度,因此其使用範圍具有一定的侷限性,如何正確識別兩個獨立維度也需要一定的經驗積累。

3.適用場景

        在以下情況下可以考慮使用橋接模式:

        (1)如果一個系統需要在抽象化和具體化之間增加更多的靈活性,避免在兩個層次之間建立靜態的繼承關係,通過橋接模式可以使它們在抽象層建立一個關聯關係。

        (2)“抽象部分”和“實現部分”可以以繼承的方式獨立擴充套件而互不影響,在程式執行時可以動態將一個抽象化子類的物件和一個實現化子類的物件進行組合,即系統需要對抽象化角色和實現化角色進行動態耦合。

        (3)一個類存在兩個(或多個)獨立變化的維度,且這兩個(或多個)維度都需要獨立進行擴充套件。

        (4)對於那些不希望使用繼承或因為多層繼承導致系統類的個數急劇增加的系統,橋接模式尤為適用。

 

練習

Sunny軟體公司欲開發一個資料轉換工具,可以將資料庫中的資料轉換成多種檔案格式,例如txtxmlpdf等格式,同時該工具需要支援多種不同的資料庫。試使用橋接模式對其進行設計。

【作者:劉偉  http://blog.csdn.net/lovelion

相關文章