設(shè)計(jì)模式系列(1)策略模式

閱讀本文大概需要花費(fèi)您2分鐘

文章內(nèi)容來自對(duì)《Head First 設(shè)計(jì)模式》第一章,《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》第七章學(xué)習(xí)總結(jié)。

一個(gè)概念

  • 策略模式:
    定義了算法族鞭衩,分別封裝起來,讓他們之間可以相互替換,此模式讓算法的變化獨(dú)立于使用算法的客戶倾芝。

三個(gè)設(shè)計(jì)原則

1)** 找出應(yīng)用中可能需要變化之處,把它們獨(dú)立出來箭跳,不要和那些不需要變化的代碼混在一起**
比如鴨子類的叫和飛的行為就屬于變化的部分晨另,獨(dú)立出來后鴨子類可以動(dòng)態(tài)去設(shè)置不同的行為。
2)設(shè)計(jì)接口編程谱姓,而不是針對(duì)實(shí)現(xiàn)編程借尿。
3)多用組合,少用繼承
鴨子的行為是多個(gè)行為對(duì)象組合而來屉来,不是用的繼承路翻。
主要講了創(chuàng)建一個(gè)鴨子類,需要飛和叫等行為茄靠,動(dòng)態(tài)去改變茂契。

應(yīng)用示例

  • 一個(gè)示例:
    真實(shí)的鴨子:會(huì)叫(嘎嘎叫) 會(huì)飛 會(huì)游泳
    橡皮鴨:會(huì)叫(吱吱叫),不會(huì)飛 不會(huì)游泳
    誘餌鴨:不會(huì)叫 不會(huì)飛 不會(huì)游泳
    ··· ···

兩種有缺陷實(shí)現(xiàn)方式:
(1)繼承
存在的問題:
1)代碼在多個(gè)子類中重復(fù)慨绳,就算有些鴨子不會(huì)嘎嘎叫掉冶,仍然要去實(shí)現(xiàn)父類的“叫”的方法,但不過是do nothing
2)很難知道鴨子的全部行為脐雪,因?yàn)橛行┓椒m然實(shí)現(xiàn)卻是do nothing
3)運(yùn)行時(shí)行為不易改變
4)改變會(huì)牽一發(fā)動(dòng)全身郭蕉,造成其他鴨子不想要的改變。如果需要鴨子跳舞喂江,父類增加這個(gè)方法后召锈,其他所有繼承該父類的鴨子
都需要去實(shí)現(xiàn)這個(gè)方法。就造成了1)和2)的問題获询。
(2)使用Flyable和Quackable接口涨岁,需要此類行為的對(duì)象,實(shí)現(xiàn)相關(guān)接口即可
存在的問題:
1)代碼沒有辦法復(fù)用吉嚣。比如每一個(gè)會(huì)嘎嘎叫的鴨子對(duì)象都需要重新去實(shí)現(xiàn)一遍嘎嘎叫的接口梢薪。
2)每次新增加一種鴨子類型,就需要檢查相關(guān)接口是否已經(jīng)實(shí)現(xiàn)尝哆。

策略模式實(shí)現(xiàn):

Paste_Image.png

[沒學(xué)會(huì)怎么畫uml秉撇,繼續(xù)改進(jìn) = =]
代碼請(qǐng)見:
https://github.com/chaozaiai/JavaTrain/tree/master/headfirst_mode/chapter01

《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn) 》

使用場景:

  • 針對(duì)同一類型問題的多種處理方式,僅僅是具體行為有差別時(shí)
  • 需要安全的封裝多種同一類型的操作時(shí)
  • 出現(xiàn)同一抽象類有多個(gè)子類,而又需要使用if-else后者switch-case來選擇具體子類時(shí)

android 使用策略模式實(shí)現(xiàn)舉的例子是Animation(動(dòng)畫)對(duì)象琐馆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末规阀,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘦麸,更是在濱河造成了極大的恐慌谁撼,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滋饲,死亡現(xiàn)場離奇詭異厉碟,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)屠缭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門箍鼓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呵曹,你說我怎么就攤上這事袄秩。” “怎么了逢并?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長郭卫。 經(jīng)常有香客問我砍聊,道長,這世上最難降的妖魔是什么贰军? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任玻蝌,我火速辦了婚禮,結(jié)果婚禮上词疼,老公的妹妹穿的比我還像新娘俯树。我一直安慰自己,他們只是感情好贰盗,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布许饿。 她就那樣靜靜地躺著,像睡著了一般舵盈。 火紅的嫁衣襯著肌膚如雪陋率。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天秽晚,我揣著相機(jī)與錄音瓦糟,去河邊找鬼。 笑死赴蝇,一個(gè)胖子當(dāng)著我的面吹牛菩浙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼劲蜻,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼陆淀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斋竞,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤倔约,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后坝初,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浸剩,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鳄袍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了绢要。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拗小,死狀恐怖重罪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哀九,我是刑警寧澤剿配,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站阅束,受9級(jí)特大地震影響呼胚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜息裸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一蝇更、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呼盆,春花似錦年扩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腿时,卻和暖如春克胳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背圈匆。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工漠另, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跃赚。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓笆搓,卻偏偏與公主長得像性湿,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子满败,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 什么是策略模式 策略模式定義了算法族肤频,分別封裝起來,讓它們之間可以互相替換算墨,此模式讓算法的變化獨(dú)立于使用算法的客戶...
    Zentopia閱讀 3,769評(píng)論 6 11
  • 模擬鴨子游戲的需求 SimUDuck游戲中會(huì)出現(xiàn)各種鴨子宵荒,一邊游泳戲水,一邊呱呱叫净嘀。通過標(biāo)準(zhǔn)的OO技術(shù)报咳,設(shè)計(jì)一個(gè)超...
    一縷陽憶往昔閱讀 459評(píng)論 2 0
  • 設(shè)計(jì)模式 開題先說明一下,設(shè)計(jì)模式告訴我們?nèi)绾谓M織類和對(duì)象以解決某種問題挖藏。讓代碼變得更加優(yōu)雅是我們責(zé)無旁貸的任務(wù) ...
    tanghuailong閱讀 444評(píng)論 0 2
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,125評(píng)論 29 470
  • 文/向內(nèi)行走的人 “ 做人難膜眠,做好人更難上加難岩臣。” 小時(shí)候宵膨,家長告訴我們要做一個(gè)樂于助人的好...
    好玖不見閱讀 324評(píng)論 0 1