轉(zhuǎn)-橋接模式和策略模式的區(qū)別

學(xué)習(xí)的過程中發(fā)現(xiàn)這兩個概念真的是有點區(qū)分不開狗超,盡管可以很感性的說bridge模式要比strategy模式更復(fù)雜更具可塑性丝格,更“高級”唠梨,但是如何清晰闡述兩者區(qū)別,卻實是有點困難柒昏。

套用偉人的一句話凳宙,站在巨人的肩膀上看得更遠,下邊三段分別來自CSDN論壇的貼子和一篇blogjava的文章职祷,看了之后令我茅塞頓開氏涩,為表尊重不在冗述,直接貼原文了堪旧。

實際上所有模式可以只分為類模式和對象模式兩種削葱,類模式是用繼承而對象模式是用委托Bridge模式和Strategy模式相似就是因為他們都將任務(wù)委托給了另外一個接口的具體實現(xiàn),他們之間的區(qū)別在于Bridge的目的是讓底層實現(xiàn)和上層接口可以分別演化淳梦,從而提高移植性而Strategy的目的是將復(fù)雜的算法封裝起來析砸,從而便于替換不同的算法。因此可以想象一般情況下Bridge的實現(xiàn)幾乎不會在運行時更改而Strategy的算法則很有可能需要在運行時更換爆袍,這就導(dǎo)致在細節(jié)方面需要考慮的因素可能會很不相同首繁。

strategy模式是為了擴展和修改作郭,并提供動態(tài)配置。它往往可以在同一環(huán)境當(dāng)中使用不同的策略弦疮,就是調(diào)用不同的派生類夹攒。其內(nèi)部實現(xiàn)是自由的,不受已有的類接口的限制(很多時候根本就不調(diào)用現(xiàn)成的接口)胁塞。bridge模式是往往是為了利用已有的方法或類咏尝。它將原來不統(tǒng)一,不兼容的接口封裝起來啸罢,變成統(tǒng)一的接口编检。它的應(yīng)用往往是不同的環(huán)境或平臺下只能選擇一 種,比如說在windows平臺下只能用WinClass,而在unix平臺下只能用UnixClass.它的主要作用不是配置而是定義通用接口扰才。

據(jù)個例子來說:我要畫園允懂,要實心園,我可以用SolidPen來配置衩匣,畫虛線園可以用dashedPen來配置蕾总。這是strategy模式。而同樣是畫園琅捏,我是在windows下來畫實心園生百,就用windowPen+solidPen來配置,在unix下畫實心園就用 unixPen+solidPen來配置柄延。如果要再windows下畫虛線園置侍,就用windowsPen+dashedPen來配置,要在unix下畫虛 線園拦焚,就用unixPen+dashedPen來配置。

我這里僅僅是就一種情況來說strategy和bridge的組合應(yīng)用杠输,其他的組合可能性隨環(huán)境變化而多種多樣赎败。從中可以看出,bridge和strategy是可能組合使用蠢甲,側(cè)重不同方面的僵刮。模式某種角度上來講就是對象組合。不要看他們都是對象組合就好像是一樣的鹦牛。模式的動機搞糕,意圖,使用場合曼追,組合方式窍仰,這些都是模式的一部分。其中細微的不同足以區(qū)分不同的模式礼殊。

橋接(Bridge)模式是結(jié)構(gòu)型模式的一種驹吮,而策略(strategy)模式則屬于行為模式针史。以下是它們的UML結(jié)構(gòu)圖。

在橋接模式中碟狞,Abstraction通過聚合的方式引用Implementor啄枕。

在策略模式中,Context也使用聚合的方式引用Startegy抽象接口族沃。

從他們的結(jié)構(gòu)圖可知频祝,在這兩種模式中,都存在一個對象使用聚合的方式引用另一個對象的抽象接口的情況脆淹,而且該抽象接口的實現(xiàn)可以有多種并且可以替換常空。可以說兩者在表象上都是調(diào)用者與被調(diào)用者之間的解耦未辆,以及抽象接口與實現(xiàn)的分離窟绷。

那么兩者的區(qū)別體現(xiàn)在什么地方呢?

1. 首先咐柜,在形式上兼蜈,兩者還是有一定區(qū)別的,對比兩幅結(jié)構(gòu)圖拙友,我們可以發(fā)現(xiàn)为狸,在橋接模式中不僅Implementor具有變化 (ConcreateImplementior),而且Abstraction也可以發(fā)生變化(RefinedAbstraction)遗契,而且兩者的變化 是完全獨立的辐棒,RefinedAbstraction與ConcreateImplementior之間松散耦合,它們僅僅通過Abstraction與 Implementor之間的關(guān)系聯(lián)系起來牍蜂。而在策略模式中漾根,并不考慮Context的變化,只有算法的可替代性鲫竞。

2. 其次在語意上辐怕,橋接模式強調(diào)Implementor接口僅提供基本操作,而Abstraction則基于這些基本操作定義更高層次的操作从绘。而策略模式強調(diào) Strategy抽象接口的提供的是一種算法寄疏,一般是無狀態(tài)、無數(shù)據(jù)的僵井,而Context則簡單調(diào)用這些算法完成其操作陕截。

  1. 橋接模式中不僅定義Implementor的接口而且定義Abstraction的接口,Abstraction的接口不僅僅是為了與 Implementor通信而存在的批什,這也反映了結(jié)構(gòu)型模式的特點:通過繼承农曲、聚合的方式組合類和對象以形成更大的結(jié)構(gòu)。在策略模式中驻债,Startegy 和Context的接口都是兩者之間的協(xié)作接口朋蔫,并不涉及到其它的功能接口罚渐,所以它是行為模式的一種。行為模式的主要特點就是處理的是對象之間的通信方 式驯妄,往往是通過引入中介者對象將通信雙方解耦荷并,在這里實際上就是將Context與實際的算法提供者解耦。

所以相對策略模式青扔,橋接模式要表達的內(nèi)容要更多源织,結(jié)構(gòu)也更加復(fù)雜。橋接模式表達的主要意義其實是接口隔離的原則微猖,即把本質(zhì)上并不內(nèi)聚的兩種體系區(qū)別 開來谈息,使得它們可以松散的組合,而策略在解耦上還僅僅是某一個算法的層次凛剥,沒有到體系這一層次侠仇。從結(jié)構(gòu)圖中可以看到,策略的結(jié)構(gòu)是包容在橋接結(jié)構(gòu)中的犁珠,橋 接中必然存在著策略模式逻炊,Abstraction與Implementor之間就可以認為是策略模式,但是橋接模式一般Implementor將提供一系 列的成體系的操作犁享,而且Implementor是具有狀態(tài)和數(shù)據(jù)的靜態(tài)結(jié)構(gòu)余素。而且橋接模式Abstraction也可以獨立變化。

轉(zhuǎn):https://blog.csdn.net/youthon/article/details/7653389

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末炊昆,一起剝皮案震驚了整個濱河市桨吊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凤巨,老刑警劉巖视乐,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異敢茁,居然都是意外死亡炊林,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門卷要,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人独榴,你說我怎么就攤上這事僧叉。” “怎么了棺榔?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵瓶堕,是天一觀的道長。 經(jīng)常有香客問我症歇,道長郎笆,這世上最難降的妖魔是什么谭梗? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宛蚓,結(jié)果婚禮上激捏,老公的妹妹穿的比我還像新娘。我一直安慰自己凄吏,他們只是感情好远舅,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痕钢,像睡著了一般图柏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上任连,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天蚤吹,我揣著相機與錄音,去河邊找鬼随抠。 笑死裁着,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的暮刃。 我是一名探鬼主播跨算,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼椭懊!你這毒婦竟也來了诸蚕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤氧猬,失蹤者是張志新(化名)和其女友劉穎背犯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盅抚,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡漠魏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了妄均。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柱锹。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖丰包,靈堂內(nèi)的尸體忽然破棺而出禁熏,到底是詐尸還是另有隱情,我是刑警寧澤邑彪,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布瞧毙,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏宙彪。R本人自食惡果不足惜矩动,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望释漆。 院中可真熱鬧悲没,春花似錦、人聲如沸灵汪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽享言。三九已至峻凫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間览露,已是汗流浹背荧琼。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留差牛,地道東北人命锄。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像偏化,于是被迫代替她去往敵國和親脐恩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1 場景問題# 1.1 發(fā)送提示消息## 考慮這樣一個實際的業(yè)務(wù)功能:發(fā)送提示消息侦讨∈幻埃基本上所有帶業(yè)務(wù)流程處理的系統(tǒng)...
    七寸知架構(gòu)閱讀 5,003評論 5 63
  • 1 場景問題# 1.1 報價管理## 向客戶報價,對于銷售部門的人來講韵卤,這是一個非常重大骗污、非常復(fù)雜的問題,對不同的...
    七寸知架構(gòu)閱讀 5,080評論 9 62
  • 本文是《設(shè)計模式——可復(fù)用面對對象軟件的基礎(chǔ)》的筆記沈条。 面對對象設(shè)計的幾個原則:1.針對接口編程需忿,而不是針對實現(xiàn)編...
    Lension閱讀 1,196評論 0 0
  • 設(shè)計模式匯總 一、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復(fù)使用蜡歹、多...
    MinoyJet閱讀 3,944評論 1 15
  • 1 場景問題 1.1 報價管理 向客戶報價屋厘,對于銷售部門的人來講,這是一個非常重大月而、非常復(fù)雜的問題汗洒,對不同的客戶要...
    4e70992f13e7閱讀 3,087評論 2 16