今天我們來講一下橋接模式。
一、案例
我有n牌子的乙個手機,需要執行一款遊戲軟體。咱們用簡單的控制台應用程式來實現一下。
1///2
///n品牌的手機中的遊戲
3///
4class
handsetngame
510 }
客戶端呼叫:
1public
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 }
客戶端呼叫:
1public
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 }
客戶端呼叫:
1public
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...