十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
什么是策略模式
石樓網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、自適應(yīng)網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
所謂策略模式,就是定義一系列的算法,并將每一個(gè)算法封裝起來(lái),而且使它們可以相互替換的設(shè)計(jì)模式。策略模式讓算法獨(dú)立于使用它的用戶而獨(dú)立變化。一般用于同類問(wèn)題的不同處理方式或者選擇同一抽象類的不同子類的時(shí)候。
策略模式的實(shí)現(xiàn)方式
現(xiàn)在已經(jīng)沒(méi)人懷疑我是文科生了,我寫(xiě)代碼繼續(xù)以文學(xué)舉例?!度龂?guó)演義》第六十二回中劉璋和劉備撕破臉皮后,龐統(tǒng)給劉備制定了三條策略——上計(jì)、中計(jì)和下計(jì)。我們先寫(xiě)一個(gè)決策者劉備類:
public classLiuBei { |
我們?cè)僦付ㄒ粋€(gè)抽象的策略接口:
public interfaceIStrategy { |
上計(jì):
public classGoodStrategyimplementsIStrategy { |
中計(jì):
public classMiddleStrategyimplementsIStrategy { |
下計(jì):
public classBadStrategyimplementsIStrategy { |
劉備選擇了中計(jì):
LiuBei liuBei =newLiuBei(); |
預(yù)知后事如何,請(qǐng)看本系列文章第一篇的舉例分解。
Android源碼中的策略模式
(1)TypeEvaluator
研究自定義控件的Android工程師應(yīng)該都用過(guò)ValueAnimator,那么對(duì)ValueAnimator的setEvaluator(TypeEvaluator value)方法一定不陌生,其中TypeEvaluator接口被RectEvaluator和FloatEvaluator等多個(gè)類引用。這就是一個(gè)典型的策略模式。
Android開(kāi)發(fā)中如何利用策略模式
(1)策略模式最主要的用途是分離算法,當(dāng)針對(duì)同一類問(wèn)題的多種處理方式僅是具體行為有差別可能產(chǎn)生大量不易維護(hù)的多分支語(yǔ)句(if-else或switch-case)的時(shí)候適合使用策略模式。常見(jiàn)的應(yīng)用場(chǎng)景比如電商App對(duì)購(gòu)物車中商品每次結(jié)算金額的不同優(yōu)惠券、折扣和郵費(fèi)策略等。
需要注意的幾個(gè)問(wèn)題
(1) 因?yàn)槊總€(gè)具體策略都會(huì)產(chǎn)生一個(gè)新策略類,所以會(huì)增加系統(tǒng)需要維護(hù)的類的數(shù)量。
(2)在基本的策略模式中,選擇所用具體實(shí)現(xiàn)的職責(zé)由客戶端對(duì)象承擔(dān)。換句話說(shuō)就是策略模式只適用于客戶端知道算法或行為的情況。
本系列其他博客
【設(shè)計(jì)模式與Android】狀態(tài)模式——一個(gè)人的兩幅面孔
【設(shè)計(jì)模式與Android】責(zé)任鏈模式——曹瞞兵敗走華容
【設(shè)計(jì)模式與Android】命令模式——軍令如山
【設(shè)計(jì)模式與Android】觀察者模式——千里眼與順風(fēng)耳
【設(shè)計(jì)模式與Android】備忘錄模式——在齊太史簡(jiǎn)