java設計模式-橋接模式(Bridge)

橋接模式曹阔,屬于結構型模式半开。
意圖:將抽象部分與它的實現(xiàn)部分分離,使他們都可以獨立的變化赃份。

這句話其實有點難理解稿茉, 在軟件工程里面,哪些部分是抽象,哪些部分是實現(xiàn)呢漓库?其實這里沒有一個具體的定義。下面幾句摘自其他書籍园蝠,便于我們理解:

1:《大話設計模式》:實現(xiàn)系統(tǒng)可能有多角度分類渺蒿,每一種分類都有可能變化,那么就把多種角度分離出來讓他們獨立變化彪薛,減少他們之間的耦合茂装。

2:《設計模式java版》:橋接模式是一種很實用的結構型設計模式,如果軟件系統(tǒng)中某個類存在兩個獨立變化的維度善延,通過該模式可以將這兩個維度分離出來少态,使兩者可以獨立擴展,讓系統(tǒng)更加符合“單一職責原則”易遣。與多層繼承方案不同彼妻,它將兩個獨立變化的維度設計為兩個獨立的繼承等級結構,并且在抽象層建立一個抽象關聯(lián)豆茫,該關聯(lián)關系類似一條連接兩個獨立繼承結構的橋侨歉,故名橋接模式

在這里我們其實沒有絕對的定義抽象部分顯示部分揩魂,我們只知道把兩個獨立的維度分離出來幽邓,并且不影響他們各自的變化的結構就是橋接模式的結構。



UML圖:

橋接模型

今天還是以《完美國際》游戲為例火脉,來做這個demo(誰讓我那么喜歡這款游戲)

問題:

在游戲中牵舵,我們有很多職業(yè),比如武俠倦挂,妖獸畸颅,羽芒等等,這些職業(yè)也都可以拿上武器妒峦,斧頭重斑,長槍,刀等等肯骇;其實在這里窥浪,我們已經(jīng)有了兩個維度,職業(yè)和武器笛丙。那么怎么才能讓每個職業(yè)都可以拿上自己的武器漾脂,或者反過來說,這些武器胚鸯,每個職業(yè)都可以使用呢骨稿?


斧頭武俠
斧頭妖獸


方案1:

有人會說,這還不簡單,我們可以設計很多職業(yè)坦冠,比如形耗,刀武俠,刀妖獸辙浑,刀羽芒激涤,斧頭武俠,斧頭妖獸判呕,斧頭羽芒等等倦踢。如圖:

設計各種武器的職業(yè)

方案1缺陷:首先這樣設計是沒問題的,但是前面已經(jīng)說過侠草,職業(yè)和武器本身就是兩個不同維度的東西辱挥,現(xiàn)在非要整合在了一起,代碼耦合性太高不說边涕,更是違背了設計模式的單一職責原則晤碘,接口隔離原則,開閉原則奥吩。


方案2:

使用橋接模式哼蛆,把職業(yè)和武器兩維度橋接在一起,但是每個維度又可以獨立發(fā)展霞赫,如圖:

橋接模型圖

圖中腮介,職業(yè)和武器是兩個獨立的維度,他們互不影響端衰,主要是由職業(yè)抽象類進行的兩個維度的橋接叠洗,代碼如下:

武器緯度(武器接口和具體實現(xiàn))


武器接口
刀實現(xiàn)武器接口
斧頭實現(xiàn)武器接口
長槍實現(xiàn)武器接口

職業(yè)緯度:


職業(yè)抽象類(和武器進行橋接)
野獸實現(xiàn)類(和武器進行橋接)
武俠實現(xiàn)類(和武器進行橋接)
羽芒實現(xiàn)類(和武器進行橋接)

測試類:

測試類

方案二總結:圖中可以看到,武器和職業(yè)兩個緯度旅东,互不影響灭抑,不論以后開通多少武器和職業(yè),兩個類互不影響抵代,各自發(fā)展腾节。完全符合單一職責原則。圖中在職業(yè)抽象類中引入了武器的接口引用進行橋接荤牍,面向了接口案腺,降低了耦合。


總結:

1康吵、橋接模式實現(xiàn)了抽象化與實現(xiàn)化的脫耦劈榨。他們兩個互相獨立,不會影響到對方晦嵌。?

?2同辣、對于兩個獨立變化的維度拷姿,使用橋接模式再適合不過了。

?3旱函、對于“具體的抽象類”(我們將抽象類的屬性都讓實現(xiàn)類接口去做啦)所做的改變响巢,是不會影響到客戶。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棒妨,一起剝皮案震驚了整個濱河市抵乓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靶衍,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茎芋,死亡現(xiàn)場離奇詭異颅眶,居然都是意外死亡,警方通過查閱死者的電腦和手機田弥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門涛酗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人偷厦,你說我怎么就攤上這事商叹。” “怎么了只泼?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵剖笙,是天一觀的道長。 經(jīng)常有香客問我请唱,道長弥咪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任十绑,我火速辦了婚禮聚至,結果婚禮上,老公的妹妹穿的比我還像新娘本橙。我一直安慰自己扳躬,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布甚亭。 她就那樣靜靜地躺著贷币,像睡著了一般。 火紅的嫁衣襯著肌膚如雪狂鞋。 梳的紋絲不亂的頭發(fā)上片择,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音骚揍,去河邊找鬼字管。 笑死啰挪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嘲叔。 我是一名探鬼主播最仑,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衣吠!你這毒婦竟也來了罚随?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤丁逝,失蹤者是張志新(化名)和其女友劉穎汁胆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霜幼,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡嫩码,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了罪既。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片铸题。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琢感,靈堂內(nèi)的尸體忽然破棺而出丢间,到底是詐尸還是另有隱情,我是刑警寧澤驹针,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布烘挫,位于F島的核電站,受9級特大地震影響牌捷,放射性物質發(fā)生泄漏墙牌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一暗甥、第九天 我趴在偏房一處隱蔽的房頂上張望喜滨。 院中可真熱鬧,春花似錦撤防、人聲如沸虽风。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辜膝。三九已至,卻和暖如春漾肮,著一層夾襖步出監(jiān)牢的瞬間厂抖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工克懊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留忱辅,地道東北人七蜘。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像墙懂,于是被迫代替她去往敵國和親橡卤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354