設計模式學習筆記(八) Bridge橋接模式

2022-02-19 15:03:13 字數 2213 閱讀 6194

bridge

橋接模式是一種結構型模式,它主要應對的是:由於型別的固有羅輯,使得型別具有兩個或兩個以上的緯度變化。也就是要求抽象不應依賴於實現細節,實現細節應依賴於抽象。

《設計模式》中說到將抽象部分與實現部分分離,使他們可以獨立的變化。

舉個例子更清楚些,好像我們平時玩的遊戲中有

ps版的,但是不是大家都有

ps。這時我們等一段時間,一般會出

pc版的或其他版本。由於支援遊戲的平台不一樣,但是如果我們編寫的遊戲程式為了適應另一種平台就要全部重新編寫的話豈不是很麻煩。再加上遊戲本身的變動,一句眾人皆知的話:「死定了」。

現在我們來看看

bridge

橋接模式,看看它是如何解決類似問題的,首先我們看看

bridge

模式的結構。

實際上,我們要做到的是把變化的部分提出,對其抽象,使變化獨立。那我們如何做呢?通過組合的方式將變化獨立出去。將乙個事物中的多個緯度變化分離。

下面舉乙個場景來理解一下,還是用汽車舉例,我現在要一輛車(

bmw或

bora

)在路(

waterroad

或cement

)上跑。現在有兩個緯度的變化點:汽車和路。也就是上圖中的

abstractchangepoint1

和abstractchangepoint2

。abstractchangepoint1

中包含有

abstractchangepoint2

物件成員。。**實現如下:

abstract

class

abstractcar

public

abstract

string run();

public

abstract

string stop();

}abstract

class

abstractroad

以汽車為變化中心,用組裝的方式將兩個變化點結合起來。使路的變化和汽車隔離。下面來編寫路的實現。

class

waterroad:abstractroad

}class

cementroad:abstractroad

}然後再來編寫汽車的實現

class

bmwcar:abstractcar

public

override

string run()

public

override

string stop()

}class

broacar:abstractcar

public

override

string run()

public

override

string stop()

}然後我們在客戶**中呼叫這些類,首先,我想要這個場景是bmw在waterroad上跑,客戶端**如下:

static

void

main(string args)

實現結果如下:

it is waterroad

bmw is running

bmw is stopped

如果我現在要一輛bora在cement上跑,我們只要稍微修改一下car的例項化就可以,**如下:

static

void

main(string args)

實現結果如下:

it is cement

broa is running

broa is stopped

最後我們再來說說

bridge

模式的要點:1、

bridge

模式使用「物件間的組合關係」解耦了抽象和實現之間固有的繫結關係,使得抽象和實現可以沿著各自的緯度來變化。

2、所謂抽象和實現沿著各自緯度的變化,即「子類化」它們,得到各個子類之後,便可以任意組合它們。3、

bridge

模式有時候類似於多繼承方案,但是多繼承方案往往違背單一職責原則(即乙個類只有乙個變化的原因),復用性比較差。

bridge

模式是比多繼承方案更好的解決方法。4、

bridge

模式的應用一般在「兩個非常強的變化緯度」,有時候即使有兩個變化的緯度,但是某個方向的變化緯度並不劇烈——換言之兩個變化不會導致縱橫交錯的結果,並不一定要使用

bridge

模式。

Bridge模式 設計模式學習筆記

bridge模式 一 意圖 將抽象部分與它的實現部分分離,使它們都可以獨立的變化。類設計的開閉原則 對擴充套件開放,對修改關閉 二 動機 1 如需增加新的型別window就必須要重新增加新的window類,且仍然要區分對應平台的window型別,如果要是新增加乙個平台,那整個結構都需要重新新增新的w...

設計模式 Bridge模式

原來對bridge模式理解不是很深入,感覺和build模式很相似,今天又看了四人幫的關於bridge模式的描述,有些新的理解 先來說下適用性 1 不想抽象和實現之間有乙個固定的繫結關係。因為程式在執行時實現部分可以被選擇或者切換 2 類的抽象以及它的實現都應該可以通過生成子類的方法加以擴充。這時br...

設計模式學習 Bridge 橋接

意圖 將抽象部分和它的實現部分分離,使得它們都可以獨立的變化 適用性 不希望抽象和實現部分有乙個固定的繫結關係 類的抽象以及它的實現可以通過生成子類的方法加以擴充 對乙個抽象的實現部分的修改應對客戶不產生影響 你對客戶晚產隱藏抽象的實現部分 示例圖 示例 瓶子裝液體,搖晃瓶子,液體跟著蕩漾 填充液體...