橋接模式 VS 裝飾器模式、狀態(tài)模式 VS 策略模式的微妙之處

橋接模式 VS 裝飾器模式碌补、狀態(tài)模式 VS 策略模式的微妙之處

Foundations of Software Engineering 的 Design Pattern 學(xué)習(xí)筆記整理

關(guān)鍵詞:設(shè)計模式壁公、橋接模式洪添、裝飾器模式、狀態(tài)模式掌唾、策略模式( Design Pattern, Bridge Pattern, Decorator Pattern, State Pattern, Strategy Pattern)

本文簡述了橋接模式(Bridge Pattern)和裝飾器模式(Decorator Pattern)放前,以及狀態(tài)模式(State Pattern)和策略模式(Strategy Pattern)的微妙之處,以及它們之間是如何“看起來就像另一者的”糯彬。

橋接是指能夠沿著不同的維度(along distinct dimensions)以多種方式(in more than one way)來指定一個對象凭语,通常使用子類型(sub-typing)和注入(injection)

new BoldText("blah blah", new UTF16Encoding))
new ItalicsText("blah blah", new ASCIIEncoing))
// where BoldText and ItalicsText are subclasses of Text and UTF16Encoding and ASCIIEncoding are subclasses of TextEncoding

裝飾器是指能夠以一種任意的方式向一個對象添加特征(responsibilities, embellishments, or features),通常使用包裝(wrapping)

裝飾器所描述的是一種 specialization情连,但是有著截然不同的機制叽粹,并且可以創(chuàng)建的變化不一定是不同維度的(variations you can create are not points on distinct dimensions):在同一維度上,多個特征可以同時添加到一個對象上却舀。使用裝飾器模式需要依賴?yán)^承虫几,但是子類型卻并不特殊化目標(biāo)對象(subtyping does not specialize the target object),我們可以使用包裝來完成這個事情(injection it into a higher level object (wrapper) does the trick)挽拔。

new Underlined(new Italics(new Bold(new Text("blah blah")))).

在上面這個例子中辆脸,我們可以使用裝飾器模式將 blah blah 變成斜體的、加粗的螃诅、帶下劃線的表示啡氢,但是不能使用橋接模式將這段文本變成既是加粗又是斜體的,因為 Bold 和 Italics 都是同一個維度下的分化(specializations along the style dimension)术裸,你必須選擇其中之一倘是。同樣,UTF16 和 ASCII 是編碼維度下的不同分化袭艺,你也必須選擇其中之一搀崭。

如果你想用橋接模式創(chuàng)建一個既是粗體、又是斜體的風(fēng)格猾编,那么你就必須定義一個名為 BoldAndItalicsText 的 Text 的子類瘤睹,這顯得不合理是嗎?是的答倡,所以轰传,你就會意識到,粗體瘪撇、斜體當(dāng)然是可以被一起使用的获茬,因為它們是特征港庄,而不是單一維度下面的不同分化,所以你需要的其實是裝飾器模式锦茁,而不是橋接模式攘轩。

再來回顧一下這個使用橋接模式的經(jīng)典例子:在一個維度上,我們有 NoSQL DB码俩、SQL DB 和 Mock DB度帮,它們是單一維度下的不同分化,而在另一個維度上稿存,我們有 Backlog DB 和 Product DB 等笨篷。

狀態(tài)模式和策略模式意外地有著類似的類圖,但是它們的意圖是不同的瓣履。

狀態(tài)不僅僅表達了在運行時去改變一個對象的行為率翅,它更加強調(diào)的是一個對象能夠識別它自己的內(nèi)部狀態(tài)并相應(yīng)地改變它的行為(也可能是改變它的狀態(tài),因此需要在對象內(nèi)部實現(xiàn)一個狀態(tài)機)袖迎。

作為策略模式的典型例子冕臭,我們會在一個機器人對象中注入一個不同的防撞策略,這時我們并沒有更改機器人的內(nèi)部狀態(tài)燕锥,所以這僅僅是選了不同的策略辜贵。當(dāng)我們在一個項目經(jīng)理對象中注入一個不同的報告生成過濾器時,我們沒有改變內(nèi)部狀態(tài)归形,只是改變了在任何狀態(tài)下的報告的打印策略托慨。

但是,如果需要一臺自動售貨機在有足夠的錢存入時與錢不夠時表現(xiàn)不同暇榴,這就是關(guān)于狀態(tài)的了厚棵。自動售貨機在有足夠資金的時候會切換狀態(tài),并且在每個狀態(tài)下只能執(zhí)行某些行為蔼紧。

因此婆硬,意圖在設(shè)計模式中是很重要的。不同的意圖意味著奸例,不同的選擇柿祈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哩至,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜜自,老刑警劉巖菩貌,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異重荠,居然都是意外死亡箭阶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仇参,“玉大人嘹叫,你說我怎么就攤上這事≌┢梗” “怎么了罩扇?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長怕磨。 經(jīng)常有香客問我喂饥,道長,這世上最難降的妖魔是什么肠鲫? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任员帮,我火速辦了婚禮,結(jié)果婚禮上导饲,老公的妹妹穿的比我還像新娘捞高。我一直安慰自己,他們只是感情好渣锦,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布硝岗。 她就那樣靜靜地躺著,像睡著了一般泡挺。 火紅的嫁衣襯著肌膚如雪辈讶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天娄猫,我揣著相機與錄音贱除,去河邊找鬼。 笑死媳溺,一個胖子當(dāng)著我的面吹牛月幌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悬蔽,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼扯躺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蝎困?” 一聲冷哼從身側(cè)響起录语,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎禾乘,沒想到半個月后澎埠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡始藕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年蒲稳,在試婚紗的時候發(fā)現(xiàn)自己被綠了氮趋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡江耀,死狀恐怖剩胁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祥国,我是刑警寧澤昵观,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站系宫,受9級特大地震影響索昂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜扩借,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一椒惨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潮罪,春花似錦康谆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至何恶,卻和暖如春孽锥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背细层。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工惜辑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫赎。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓盛撑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捧搞。 傳聞我的和親對象是個殘疾皇子抵卫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

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