原來對bridge模式理解不是很深入,感覺和build模式很相似,今天又看了四人幫的關於bridge模式的描述,有些新的理解
先來說下適用性
1、不想抽象和實現之間有乙個固定的繫結關係。(因為程式在執行時實現部分可以被選擇或者切換)。
2、類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充。這時bridge模式使你可以對不同的抽象介面和實現部分進行組合,並分別對他們進行擴充。(常用)
3、對乙個抽象的實現部分的修改應對客戶不產生影響,即客戶的**不必重新編譯。
4、你想對客戶完全以藏抽象的實現部分。在c++中,類的表示在類介面中是可見的。
5、在多個物件間共享實現(可能是引用計數), 但同時要求客戶並不知道這一點。
還有一種方式沒理解,書上是這麼說的:正如在意圖一節的類圖中所示的那樣,有許多類要生成。這樣一種類層次結構說明你必須將乙個物件分解城兩個部分。這種層次結構為「巢狀的普化」(nestd generalizations)***
結構圖如下
示例**如下
// 維護乙個implementor類的指標
class abstraction
;// 為實現abstraction定義的抽象基類,定義了實現的介面函式
class implementor
virtual ~implementor(){}
virtual void operationimpl() = 0;
};// 繼承自implementor,是implementor的不同實現之一
class concreateimplementora
: public implementor
virtual ~concreateimplementora(){}
virtual void operationimpl();
};// 繼承自implementor,是implementor的不同實現之一
class concreateimplementorb
: public implementor
virtual ~concreateimplementorb(){}
virtual void operationimpl();
};void concreateimplementora::operationimpl()
void concreateimplementorb::operationimpl()
abstraction::abstraction(implementor* pimplementor)
: m_pimplementor(pimplementor)
abstraction::~abstraction()
void abstraction::operation()
template inline void deleteobject(const deletetype * obj)
int main(int argc, char *argv)
因為adapter中包含了乙個adaptee物件,這是乙個聚合或者組合的關係。而且也是在adapter的request方法中呼叫了adaptee物件中的方法,從這個角度而言,adapter模式和bridge模式是非常類似的。
但是,他們之間有本質的區別:
1. 在adapter模式中,adaptee本身往往已經是乙個具體的、已經存在的類。在bridge模式中,implementor則是乙個抽象類或者介面;
2. 在adapter模式中,adapter類也是乙個具體的類。在bridge模式中,abstraction則是乙個抽象類;
3. 在adapter模式中,adapter類派生於乙個抽象類/介面(客戶程式所期望的)。在bridge模式中,abstraction類則不存在這樣的情況。
4. 最本質同時也是最重要的區別是,它們的意圖是不同的。
設計模式之Bridge模式
本文內容是通過學習 設計模式解析 by alan shalloway,james r.trott 一書所總結的心得。博主想通過先提出問題,再解決問題的方式來讓讀者實際體驗一把bridge模式的優勢。這也是 設計模式解析 一書中採用的講解流程,對於讀者理解會有很大幫助 文中的案例也是使用的書中提供的案...
JAVA設計模式 Bridge
個人認為bridge模式是用在對於分類的組合上的,舉個例子,在大學裡發獎學金,就拿川大來說,一共是32個學院,銀行卡有建行 工行 中行和農行,那麼發放方式就有計算機學院 工行 計算機學院 建行 數學學院 建行 數學學院 中行等32 x 4 128種方式。一般來說,就需要128個子類來實現發放獎學金這...
設計模式之Bridge
bridge定義 將抽象和行為劃分開來,各自獨立,但能動態的結合.為什麼使用?通常,當乙個抽象類或介面有多個具體實現 concrete subclass 這些concrete之間關係可能有以下兩種 1.這多個具體實現之間恰好是並列的,如前面舉例,打樁,有兩個concrete class 方形樁和圓形...