1.1定義
當乙個抽象可能有多個實現時,通常用繼承來進行協調。抽象類定義對該抽象的介面,而具體的子類則用不同的方式加以實現。繼承機制將抽象部分與它的實現部分固定在一起,使得難以對抽象部分和實現部分獨立地進行修改、擴充和重用。
如果乙個抽象類或介面有多個具體實現子類,而這些子類之中有內容或概念上重疊,需要我們把抽象的共同部分各自獨立開來:即原來是準備放在乙個介面裡,現在需要設計兩個介面——抽象介面和行為介面。然後再分別針對各自的具體子類定義抽象介面和行為介面的方法和呼叫關係。
橋接模式的用意是將抽象化(abstraction)與實現化(implementation)脫耦,使得二者可以獨立地變化。
抽象化(abstraction)
存在於多個實體中的共同的概念性聯絡,即為抽象化。作為乙個過程,抽象化就是忽略一些資訊,從而把不同的實體當做同樣的實體對待。
實現化(implementation)
抽象化給出的具體實現,即為實現化。
脫耦耦合是指兩個物件的行為的某種強關聯,脫耦則是要去掉它們之間的強關聯。在這裡,脫耦是指將抽象化和實現化之間的耦合解脫,或者將它們之間的強關聯改換成弱關聯。將兩者之間的繼承關係改為聚合關係,就是將它們之間的強關聯改換成為弱關聯。
橋接模式中的脫耦,是指抽象化和實現化之間使用組合/聚合關係,而不是繼承關係,從而使兩者可以相對獨立地變化。
1.2橋接模式結構圖
1.3 橋接模式**實現
////// implementor類
///
public
abstract
class implementor
////// concreteimplementora refinedabsractionb等派生類
///
public
class concreteimplementora: implementor
}public
class concreteimplementorb : implementor
}
////// abstraction抽象類
///
public
abstract
class abstraction
public
virtual
void operation()
}
////// 被提煉的抽象
///
public
class refinedabsraction : abstraction
}
staticvoid main(string args)
結果
具體實現a方法的執行1.4橋接模式應用分析橋接模式可以適用於以下情形:具體實現b方法的執行
請按任意鍵繼續. . .
◊ 不希望在抽象與實現部分之間有固定的繫結關係;
◊ 類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充。這時橋接模式可以對不同的抽象介面和實現部分進行組合,並分別對它們進行擴充;
◊ 對抽象的實現部分進行修改應對客戶不產生影響,即客戶的**不必重新編譯;
◊ 想對客戶完全隱藏抽象的實現部分;
◊ 想在多個物件間共享實現,但同時要求客戶並不知道這點。
橋接模式具有以下特點:
◊ 分離介面及其實現部分,乙個實現未必不變地繫結在乙個介面上。抽象類的實現可以在執行時刻進行配置,乙個物件甚至可以在執行時刻改變它的實現;
◊ 將abstraction與implementor分離有助於降低對實現部分編譯時刻的依賴性;當改變乙個實現類時,並不需要重新編譯abstraction類和client類。為了保證乙個類庫的不同版本之間的相容,需要有這個特性;
◊ 介面與實現分離有助於分層,從而產生更好的結構化系統。系統的高層部分僅需要知道abstraction和implementor即可;
◊ 提高可擴充性。可以獨立的對abstraction和implementor層次結構進行擴充;
◊ 實現細節對client透明。可以對client隱藏實現細節,如共享implementor物件以及相應的引用計數機制。
c 設計模式 橋接模式
橋接模式在介面卡模式上做了一定的擴充套件。橋接是計算機網路中的用語,本意是指通過網橋把兩個區域網連線在一起。假如同時有a和b兩個抽象類,在a中包含了b的指標,那麼就好像把a和b兩個類結合在了一起,於是叫做橋接模式。例如葡萄,可以有青葡萄,紫葡萄,而酒可以有低度數酒,高度數酒。把兩個類結合在一起,就可...
C 設計模式 橋接模式
橋接模式 bridge 將抽象部分與它的實現部分分離,使得他們都可以獨立的變化 橋接模式.cpp 此檔案包含 main 函式。程式執行將在此處開始並結束。include using namespace std class handsetsoft 手機軟體 class handsetgame publ...
設計模式 橋接模式
橋接模式 多維 如車行駛在路上。車分各種品牌 各種型號各種排氣 道路分街道 告訴 山地等 駕駛員分男女 為了減少類的數量。如果按照繼承實現會照成大量冗餘的類,類的數量會相當之大 package com.cn.duduyu.bridgepattern.car public abstract class...