橋接模式(21)

2022-02-14 05:44:58 字數 2795 閱讀 9212

今天我們來講一下橋接模式。

一、案例

我有n牌子的乙個手機,需要執行一款遊戲軟體。咱們用簡單的控制台應用程式來實現一下。

1

///2

///n品牌的手機中的遊戲

3///

4class

handsetngame

510 }

客戶端呼叫:

1

public

static

void

main()

2

二、演繹

1、第一步演繹:

如果我不僅有n品牌的手機,還有m品牌的手機也需要執行這款遊戲軟體,怎麼辦?

我們可以將執行遊戲軟體抽象出乙個父類,讓n,m品牌的手機繼承這個父類。**如下:

1

///2

///父類

3///

4class

handsetgame510

}11///12

///子類

13///

14class

handsetngame : handsetgame

1520}21

///22

///子類

23///

24class

handsetmgame : handsetgame

2530 }

客戶端呼叫:

1

public

static

void

main()

2

2、第二步演繹

還有乙個問題是,手機不僅能玩遊戲,還要有通訊錄的功能,也就是說n,m品牌的手機都有通訊錄的功能,那麼我們該怎麼做呢?

小夥伴們說,這容易啊,跟第一步一樣,抽象出乙個通訊錄的父類,讓n,m品牌手機通訊錄繼承這個父類即可。**如下:

1

///2

///父類

3///

4class

handsetbrand510

}11///12

///子類

13///

14class

handnsetbrand:handsetbrand

1520}21

///22

///子類

23///

24class

handmsetbrand:handsetbrand

2530 }

客戶端呼叫是類似的,在此不寫**了。

好,那麼問題來了,我們手機不僅有遊戲,通訊錄功能,還有很多很多的功能,例如,照相,彩信等等等等,照這樣下去,我們這種設計將會讓類異常的多,專案異常的龐大,出現這種情況,我們不禁懷疑我們的這種設計是不是出現了問題,如果出現了問題,我們改用什麼方式解決呢?

物件的繼承關係是在編譯時就定義好了,所以無法在執行時改變從父類繼承的實現,子類的實現與它的父類有非常緊密的依賴關係,以至於父類實現中的任何變化必然會導致子類發生變化。當你需要復用子類時,如果繼承下來的實現不適合解決新的問題,則父類必須重寫或者被其他更適合的類替換,這種依賴關係限制了靈活性並最終限制了復用性。

在這裡首先我們來講乙個設計原則,合成/聚合復用原則。

合成/聚合復用原則,盡量使用合成/聚合盡量不要使用類繼承,聚合表示一種弱的『擁有』關係,體現的是a物件可以包含b物件,但b物件不是a物件的一部分;合成表示一種強的『擁有』關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一樣。打個比方,大雁有兩隻翅膀,翅膀和大雁就是部分和整體的關係,他們的生命週期是相同的,是合成。大雁和雁群,是聚合關係。

好,本著合成/聚合復用原則,我們重新來設計一下我們案例中的**

1

//手機軟體

2abstract

class

handsetsoft36

//手機遊戲

7class

handsetgame:handsetsoft813

}14//手機通訊錄

15class

handsetaddresslist:handsetsoft

1621}22

//手機品牌

23abstract

class

handsetbrand

2431

//執行

32public

abstract

void

run();33}

34//

具體的手機品牌n

35class

handsetbrandn:handsetbrand

3641}42

//具體的手機品牌m

43class

handsetbrandm:handsetbrand

4449 }

客戶端呼叫:

1

public

static

void

main()

2

以上就是我們要將的一種設計模式:橋接模式。

橋接模式,將抽象部分與他的實現部分分離,使他們都可以獨立的變化。

這裡解釋一下:什麼叫抽象與他的實現分離?這並不是說,讓抽象類與其派生類分離,因為這沒有任何的意義,實現指的是抽象類和他的派生類用來實現自己的物件。

真正的理解的設計原則,很多的設計模式其實就是設計原則的使用,在不知不覺中,我們就使用了很多的設計模式了。

橋接模式(Bridge)

個人理解 橋接模式的精髓在於維護乙個抽象物件,並抽取這個物件的抽象部分。uml類圖 實現 public inte ce icomponent public class componenta icomponent public class componentb icomponent public ab...

bridge pattern 橋接模式

bridge模式又稱為handle body模式。在軟體系統中,經常面臨著 某些結構複雜的物件 的建立工作,由於需求的變化,這些物件經常面臨著劇烈的變化,但是他們卻擁有比較穩定一致的介面。大部分建立型模式,就是為了解決如何向 客戶程式 隔離出 這些易變物件 從而使得 依賴這些易變物件的客戶程式 不隨...

php 橋接模式

交接模式之模擬毛筆 1 實現類介面 inte ce color 2 具體實現顏色類 class red implements color class green implements color class blue implements color class white implements c...