策略模式

類圖

為什么要將飛行和呱呱叫行為算法提取出來(lái)?

  • 這些行為是容易變化的,將它們提取出來(lái)后續(xù)行為的具體實(shí)現(xiàn)方式發(fā)生變化不會(huì)對(duì)duck類產(chǎn)生任何影響拂蝎,只需要修改具體行為實(shí)現(xiàn)類自身的邏輯取胎。(即為封裝變化)

  • 很多鴨子類型其實(shí)并不需要飛行挠进,如橡皮鴨边锁,死鴨子等矾麻,如果將飛行和叫行為放在duck父類中纱耻,所有的duck實(shí)現(xiàn)類都必須實(shí)現(xiàn)該方法,不需要該方法行為的鴨子在實(shí)現(xiàn)時(shí)就只能override該方法后空著不實(shí)現(xiàn)具體邏輯险耀,這樣會(huì)導(dǎo)致產(chǎn)生很多重復(fù)無(wú)用代碼弄喘。將這兩種行為作為duck的類變量,所有的飛行和呱呱叫都會(huì)委托具體行為去執(zhí)行甩牺,則可以清除這些無(wú)用代碼蘑志。(個(gè)人另外看法,對(duì)于無(wú)用代碼來(lái)說(shuō),可以把fly和quack方法座位duck類的普通方法急但,不要定義為抽象方法就可以了澎媒,不需要實(shí)現(xiàn)該方法的鴨子不要重寫該方法就好了)(組合代替繼承)

  • <b>個(gè)人看來(lái)最最最重要的一點(diǎn),也是策略模式的核心功能:運(yùn)行時(shí)可動(dòng)態(tài)改變行為策略</b>羊始,通過(guò)duck類暴露setter方法的方式旱幼,調(diào)用方可隨時(shí)根據(jù)需求更換duck類的行為策略,這也是在我看來(lái)<b>策略模式跟模版方法模式最大最大的區(qū)別</b>

策略模式在實(shí)際開(kāi)發(fā)中的應(yīng)用

首先突委,我在百度上搜到了好多展示自己如何運(yùn)用策略模式重構(gòu)自己代碼的例子柏卤,看完都發(fā)現(xiàn)其實(shí)完全不是那么回事,大多數(shù)案例都是以if else或者switch case這種代碼為切入點(diǎn)匀油,說(shuō)根據(jù)策略模式可以去掉這些難看的層層判斷缘缚,他們基本采用的方式是維護(hù)了一個(gè)map,客戶端調(diào)用時(shí)通過(guò)map找到對(duì)應(yīng)的策略敌蚜,然后執(zhí)行策略方法....從本質(zhì)上看這和if else沒(méi)有任何本質(zhì)的區(qū)別吧桥滨,只是把判斷具體用哪個(gè)策略的方法從if else改善成用map查找了而已。

個(gè)人覺(jué)得策略模式要想用好弛车,必須反映出運(yùn)行時(shí)動(dòng)態(tài)改變策略的能力齐媒。不然即使使用了策略模式,也就是模版方法模式的變種而已!!!

另外纷跛,關(guān)于運(yùn)行時(shí)動(dòng)態(tài)改變策略喻括,應(yīng)該是每一次改變是全局性的改變,只要改變了之后這個(gè)context類在下一次被修改策略前都要保持以現(xiàn)在的策略響應(yīng)請(qǐng)求贫奠。(就是說(shuō)改變不是臨時(shí)改變,唬血。。唤崭。不知道怎么形容)

在非單機(jī)的環(huán)境中拷恨,策略模式可能需要依靠消息中間件同步各服務(wù)器同時(shí)響應(yīng)策略修改,在分布式web開(kāi)發(fā)中谢肾,策略模式使用場(chǎng)景目前我狹隘的眼光看來(lái)還比較難用上腕侄,稍微可以想到的可能是一些容災(zāi)方案上面的,全局的策略變更也必須通過(guò)消息中間件或者分布式數(shù)據(jù)庫(kù)緩存等來(lái)實(shí)現(xiàn)芦疏,且要考慮一些容災(zāi)邏輯冕杠。

下面是自己想到的一些可以運(yùn)營(yíng)策略模式的場(chǎng)景:

  • head first中提到的游戲中更換游戲角色的武器
  • 實(shí)時(shí)翻譯程序中點(diǎn)擊切換語(yǔ)言按鈕時(shí)更換翻譯策略
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市眯分,隨后出現(xiàn)的幾起案子拌汇,更是在濱河造成了極大的恐慌柒桑,老刑警劉巖弊决,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡飘诗,警方通過(guò)查閱死者的電腦和手機(jī)与倡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)昆稿,“玉大人纺座,你說(shuō)我怎么就攤上這事「忍叮” “怎么了净响?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)喳瓣。 經(jīng)常有香客問(wèn)我馋贤,道長(zhǎng),這世上最難降的妖魔是什么畏陕? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任配乓,我火速辦了婚禮,結(jié)果婚禮上惠毁,老公的妹妹穿的比我還像新娘犹芹。我一直安慰自己,他們只是感情好鞠绰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布腰埂。 她就那樣靜靜地躺著,像睡著了一般洞豁。 火紅的嫁衣襯著肌膚如雪盐固。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,488評(píng)論 1 302
  • 那天丈挟,我揣著相機(jī)與錄音刁卜,去河邊找鬼。 笑死曙咽,一個(gè)胖子當(dāng)著我的面吹牛蛔趴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播例朱,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼孝情,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了洒嗤?” 一聲冷哼從身側(cè)響起箫荡,我...
    開(kāi)封第一講書(shū)人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渔隶,沒(méi)想到半個(gè)月后羔挡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洁奈,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年绞灼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了利术。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡低矮,死狀恐怖印叁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情军掂,我是刑警寧澤轮蜕,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蝗锥,受9級(jí)特大地震影響肠虽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玛追,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一税课、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痊剖,春花似錦韩玩、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至叮贩,卻和暖如春击狮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背益老。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工彪蓬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捺萌。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓档冬,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親桃纯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子酷誓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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

  • 設(shè)計(jì)模式 開(kāi)題先說(shuō)明一下,設(shè)計(jì)模式告訴我們?nèi)绾谓M織類和對(duì)象以解決某種問(wèn)題态坦。讓代碼變得更加優(yōu)雅是我們責(zé)無(wú)旁貸的任務(wù) ...
    tanghuailong閱讀 455評(píng)論 0 2
  • 1 場(chǎng)景問(wèn)題# 1.1 報(bào)價(jià)管理## 向客戶報(bào)價(jià)盐数,對(duì)于銷售部門的人來(lái)講,這是一個(gè)非常重大伞梯、非常復(fù)雜的問(wèn)題玫氢,對(duì)不同的...
    七寸知架構(gòu)閱讀 5,080評(píng)論 9 62
  • 模擬鴨子游戲的需求 SimUDuck游戲中會(huì)出現(xiàn)各種鴨子着茸,一邊游泳戲水,一邊呱呱叫琐旁。通過(guò)標(biāo)準(zhǔn)的OO技術(shù),設(shè)計(jì)一個(gè)超...
    一縷陽(yáng)憶往昔閱讀 466評(píng)論 2 0
  • 1 場(chǎng)景問(wèn)題 1.1 報(bào)價(jià)管理 向客戶報(bào)價(jià)猜绣,對(duì)于銷售部門的人來(lái)講灰殴,這是一個(gè)非常重大、非常復(fù)雜的問(wèn)題掰邢,對(duì)不同的客戶要...
    4e70992f13e7閱讀 3,087評(píng)論 2 16
  • 這幾天正好學(xué)習(xí)到了軟件測(cè)試的白盒測(cè)試部分牺陶,但在圖書(shū)館書(shū)籍和課本上找不到相關(guān)的內(nèi)容,于是一部分一部分百度學(xué)習(xí)之后辣之,總...
    WhiteWerer閱讀 478評(píng)論 0 0