android 設(shè)計(jì)模式 之策略模式

作者:ivm

之前介紹了 單例模式,觀察者模式。今天介紹一個(gè)能簡(jiǎn)化代碼,封裝算法的超好用模式--策略模式;

《Android 源碼設(shè)計(jì)模式 解析與實(shí)戰(zhàn)》這本書很棒哦~

今天呢,我換一種方式講解,先講一個(gè)例子,然后在具體講解策略模式

例子:需求 出行助手,給定人數(shù),出行方式,要算出具體的錢.

火車 ?1人50元

長(zhǎng)途汽車 1人60元

自駕游 ?1人75元

很簡(jiǎn)單吧,再不用策略模式情況下,擁有擴(kuò)展性的代碼:

普通寫法

在這個(gè)類中 既能計(jì)算火車的出行方式,自駕游的出行方式,長(zhǎng)途汽車的出行方式,它的功能不單一,而且代碼中有switch—case 或者 if —else if 之類的語句,如果出行方式增加一種,我需要增加一個(gè)計(jì)算的方法,并且在判斷語句中在加一個(gè)判斷。這種代碼,維護(hù)性差,當(dāng)你要增加一種新的方式,就要改判斷,會(huì)增加出錯(cuò)的可能。

下面我用策略模式寫一遍

計(jì)算價(jià)格是每種方式都有的,我們將它抽象成接口

接口

把每種出行方式獨(dú)立成一個(gè)類 并繼承這個(gè)接口

策略類

最后創(chuàng)建一個(gè)計(jì)算類

Context類

通過設(shè)置策略 去分別計(jì)算價(jià)格,這種寫法沒有反鎖的判斷語句,而且更容易更新迭代。

那么正式開始介紹策略模式了

什么是策略模式

定義了一系列的算法,并將每一個(gè)算法封裝起來,而且使它們還可以相互替換。策略模式獨(dú)立于使用者而獨(dú)立變換。

策略模式的使用場(chǎng)景

1.針對(duì)同一類型問題的多種處理方式,僅僅是具體行為有差別時(shí)。

2.需要安全的封裝多種統(tǒng)一類型的操作時(shí)

3.出現(xiàn)同一抽象類有多個(gè)子類,而又需要使用if —else 或者 switch — case 來選擇具體子類時(shí)

策略模式的UML 圖

UML

角色介紹

1.Context 用來操作策略的上下文環(huán)境

2.Stragety 策略的抽象

3.ConcreteStragetA,ConcreteStragetB 具體的策略實(shí)現(xiàn)

結(jié)語

策略模式 優(yōu)點(diǎn)就是 結(jié)構(gòu)清晰明了、使用簡(jiǎn)單直觀,耦合性相對(duì)較低、擴(kuò)展方便、封裝更徹底、數(shù)據(jù)更安全。

缺點(diǎn)是:子類很多 ?(還記的65535 對(duì)你的支配的恐懼么 ?= =)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容