設計模式 Bridge模式

2021-05-27 17:13:01 字數 1901 閱讀 3764

原來對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 方形樁和圓形...