24種設(shè)計(jì)模式之策略模式(Strategy Pattern)

優(yōu)點(diǎn):

1、 策略模式提供了管理相關(guān)的算法族的辦法拒啰。策略類的等級結(jié)構(gòu)定義了一個(gè)算法或行為族驯绎。恰當(dāng)使用繼承可以把公共的代碼轉(zhuǎn)移到父類里面,從而避免重復(fù)的代碼谋旦。

2剩失、 策略模式提供了可以替換繼承關(guān)系的辦法。繼承可以處理多種算法或行為册着。如果不是用策略模式拴孤,那么使用算法或行為的環(huán)境類就可能會有一些子類,每一個(gè)子類提供一個(gè)不同的算法或行為甲捏。但是演熟,這樣一來算法或行為的使用者就和算法或行為本身混在一起蒜绽。決定使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯混合在一起诉字,從而不可能再獨(dú)立演化。繼承使得動態(tài)改變算法或行為變得不可能。

3免猾、 使用策略模式可以避免使用多重條件轉(zhuǎn)移語句。多重轉(zhuǎn)移語句不易維護(hù)囤热,它把采取哪一種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起猎提,統(tǒng)統(tǒng)列在一個(gè)多重轉(zhuǎn)移語句里面,比使用繼承的辦法還要原始和落后。

缺點(diǎn):

1锨苏、客戶端必須知道所有的策略類疙教,并自行決定使用哪一個(gè)策略類。這就意味著客戶端必須理解這些算法的區(qū)別伞租,以便適時(shí)選擇恰當(dāng)?shù)乃惴愓晡健Q言之,策略模式只適用于客戶端知道所有的算法或行為的情況葵诈。

2裸弦、 策略模式造成很多的策略類,每個(gè)具體策略類都會產(chǎn)生一個(gè)新類作喘。有時(shí)候可以通過把依賴于環(huán)境的狀態(tài)保存到客戶端里面理疙,而將策略類設(shè)計(jì)成可共享的,這樣策略類實(shí)例可以被不同客戶端使用泞坦。換言之窖贤,可以使用享元模式來減少對象的數(shù)量。

策略模式的抽象過程

簡單的說贰锁,策略模式就是要應(yīng)對規(guī)則變化和新規(guī)則加入對程序帶來的影響赃梧。

對于面向?qū)ο蟪绦蛟O(shè)計(jì)如何實(shí)現(xiàn)呢?通過接口可以避免直接調(diào)用規(guī)則豌熄,從而使得業(yè)務(wù)變化不會對規(guī)則產(chǎn)生影響槽奕。同時(shí),添加新規(guī)則也不會影響業(yè)務(wù)流程房轿。

這里舉個(gè)例子:

話說 劉備要到江東娶老婆了粤攒,走之前諸葛亮給趙云(伴郎) 三個(gè)錦囊妙計(jì),說是按天機(jī)拆開解決棘手問題囱持,最后搞得周瑜是賠了夫人又折兵夯接。

那咱們來看看這是個(gè)場景是什么樣子的。

先說這個(gè)場景種的要素:三個(gè)妙計(jì)纷妆,一個(gè)錦囊盔几,一個(gè)趙云。 妙計(jì)是諸葛亮給的掩幢,妙計(jì)放在錦囊里俗稱錦囊妙計(jì)逊拍。那個(gè)趙云就是一個(gè)干活的人,從錦囊中取出妙計(jì)际邻,執(zhí)行芯丧。

首先先寫一個(gè)妙計(jì)的接口

再來寫三個(gè)實(shí)現(xiàn)類:

第一妙計(jì)---> 找喬國老幫忙,使孫權(quán)不能殺劉備

第二妙計(jì)---> 求吳國太開發(fā)綠燈

第三妙計(jì)---> 孫夫人斷后世曾,阻擋追兵

三個(gè)妙計(jì)有了缨恒,現(xiàn)在就差一個(gè) 錦囊了

現(xiàn)在所有的準(zhǔn)備都好。就等趙云遇到了不能解決的問題,打開錦囊 解決問題了

運(yùn)行的結(jié)果:

這就是策略模式骗露,高內(nèi)聚低耦合岭佳。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市萧锉,隨后出現(xiàn)的幾起案子珊随,更是在濱河造成了極大的恐慌,老刑警劉巖柿隙,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玫恳,死亡現(xiàn)場離奇詭異,居然都是意外死亡优俘,警方通過查閱死者的電腦和手機(jī)京办,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帆焕,“玉大人惭婿,你說我怎么就攤上這事∫侗ⅲ” “怎么了财饥?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長折晦。 經(jīng)常有香客問我钥星,道長,這世上最難降的妖魔是什么满着? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任谦炒,我火速辦了婚禮,結(jié)果婚禮上风喇,老公的妹妹穿的比我還像新娘宁改。我一直安慰自己,他們只是感情好魂莫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布还蹲。 她就那樣靜靜地躺著,像睡著了一般耙考。 火紅的嫁衣襯著肌膚如雪谜喊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天倦始,我揣著相機(jī)與錄音斗遏,去河邊找鬼。 笑死楣号,一個(gè)胖子當(dāng)著我的面吹牛最易,可吹牛的內(nèi)容都是我干的怒坯。 我是一名探鬼主播炫狱,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼藻懒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了视译?” 一聲冷哼從身側(cè)響起嬉荆,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酷含,沒想到半個(gè)月后鄙早,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡椅亚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年限番,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呀舔。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弥虐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出媚赖,到底是詐尸還是另有隱情霜瘪,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布惧磺,位于F島的核電站颖对,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏磨隘。R本人自食惡果不足惜缤底,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望番捂。 院中可真熱鬧训堆,春花似錦、人聲如沸白嘁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽絮缅。三九已至鲁沥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耕魄,已是汗流浹背画恰。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吸奴,地道東北人允扇。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓缠局,卻偏偏與公主長得像,于是被迫代替她去往敵國和親考润。 傳聞我的和親對象是個(gè)殘疾皇子狭园,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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

  • 本文僅僅為入門,高手勿噴糊治。 實(shí)際工作中唱矛,我們總會遇到類似如下的需求:某支付系統(tǒng)接入以下幾種商戶進(jìn)行充值:易寶網(wǎng)易,...
    JarvanMo閱讀 14,238評論 14 26
  • 注:本文中的 引用實(shí)例 皆為引用《您的設(shè)計(jì)模式》上實(shí)例 策略模式 1井辜、什么是策略模式绎谦?第一點(diǎn):定義一系列算法第二點(diǎn)...
    Flonger閱讀 440評論 0 2
  • 1 場景問題# 1.1 報(bào)價(jià)管理## 向客戶報(bào)價(jià),對于銷售部門的人來講粥脚,這是一個(gè)非常重大窃肠、非常復(fù)雜的問題,對不同的...
    七寸知架構(gòu)閱讀 5,082評論 9 62
  • 1 場景問題 1.1 報(bào)價(jià)管理 向客戶報(bào)價(jià)刷允,對于銷售部門的人來講冤留,這是一個(gè)非常重大、非常復(fù)雜的問題恃锉,對不同的客戶要...
    4e70992f13e7閱讀 3,088評論 2 16
  • 設(shè)計(jì)模式匯總 一搀菩、基礎(chǔ)知識 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用、多...
    MinoyJet閱讀 3,948評論 1 15