Android設(shè)計(jì)模式之策略模式詳解
策略模式
一個(gè)功能的效果,有不同的算法與策略,根據(jù)不同的選擇選擇不同的結(jié)果。
簡(jiǎn)單來(lái)說(shuō),只要你寫(xiě)過(guò)程序就用過(guò)策略模式,不要說(shuō)沒(méi)用過(guò),難道if-else(switch)沒(méi)用過(guò)嗎…..
if-else在其實(shí)就是一個(gè)策略模式的體現(xiàn),根據(jù)不同的選擇處理不同的結(jié)果。
問(wèn)題
如果把所有的方法全部用if-else(switch)來(lái)處理,從功能上說(shuō)沒(méi)問(wèn)題,但是沖代碼層面的維護(hù)與使用來(lái)說(shuō),if-else多了之后會(huì)讓類(lèi)變的過(guò)于龐大,閱讀不利,修改困難
解決問(wèn)題
使用策略模式,定義統(tǒng)一接口,每一個(gè)不同的功能(if-else)實(shí)現(xiàn)接口做一個(gè)具體類(lèi),外部調(diào)用具體類(lèi)來(lái)達(dá)到不同的結(jié)果。
使用場(chǎng)景
同一個(gè)問(wèn)題,有不同的解決方案
一個(gè)類(lèi)有多個(gè)if-else的判斷處理結(jié)果
封裝SDK時(shí)上層處理結(jié)果返回的情況,調(diào)用者關(guān)心結(jié)果,不關(guān)注實(shí)現(xiàn)過(guò)程
列入Android源碼中的動(dòng)畫(huà)的TimeInterpolator,ListView的適配器
代碼實(shí)現(xiàn)
有一個(gè)商品售賣(mài),在售賣(mài)過(guò)程中,要根據(jù)不同的用戶給予不同的價(jià)格(半價(jià),8折,7折等等),在知道用戶的前提下,如何直接給予價(jià)格呢?
(一)價(jià)格接口的實(shí)現(xiàn)
public interface PriceStrategy { int setPrice(int price); }
(二)實(shí)現(xiàn)具體的價(jià)格類(lèi)
7折:
public class seventPriceStrategy implements PriceStrategy { @Override public Double setPrice(int price) { return 0.7 * price; } }
5折:
public class HalfPriceStrategy implements PriceStrategy { @Override public Double setPrice(int price) { return 0.5 * price; } }
(三)價(jià)格算法管理類(lèi)
public class PriceAlgorithm { private PriceStrategy priceStrategy; public PriceStrategy getPriceStrategy() { return priceStrategy; } public void setPriceStrategy(PriceStrategy priceStrategy) { this.priceStrategy = priceStrategy; } public Double getPrice(int price) { if(priceStrategy!=null){ return priceStrategy.setPrice(price); } return null; } }
傳入具體的實(shí)現(xiàn)類(lèi),獲取返回接口
(四)調(diào)用方式
PriceAlgorithm priceAlgorithm = new PriceAlgorithm(); priceAlgorithm.setPriceStrategy(new HalfPriceStrategy()); System.out.print("\n" + "1塊錢(qián)" + "5折后的價(jià)格:" + String.valueOf(priceAlgorithm.getPrice(1))); PriceAlgorithm priceAlgorithm2 = new PriceAlgorithm(); priceAlgorithm2.setPriceStrategy(new seventPriceStrategy()); System.out.print("\n" + "2塊錢(qián)" + "7折后的價(jià)格:" + String.valueOf(priceAlgorithm2.getPrice(2)));
(五)顯示結(jié)果
1塊錢(qián)5折后的價(jià)格:0.5
2塊錢(qián)7折后的價(jià)格:1.4
總結(jié)
使用策略模式之后的維護(hù)只需要維護(hù)具體的實(shí)現(xiàn)類(lèi),如果有新增的方式,只需要擴(kuò)展實(shí)現(xiàn)具體類(lèi)即可,便于維護(hù)使用。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android源碼學(xué)習(xí)之單例模式應(yīng)用及優(yōu)點(diǎn)介紹
- android設(shè)計(jì)模式之單例模式詳解
- Android 單例模式 Singleton 簡(jiǎn)單實(shí)例設(shè)計(jì)模式解析
- android開(kāi)發(fā)設(shè)計(jì)模式之——單例模式詳解
- Android單例模式的幾種方法總結(jié)
- Android源碼學(xué)習(xí)之觀察者模式應(yīng)用及優(yōu)點(diǎn)介紹
- android基礎(chǔ)教程之夜間模式實(shí)現(xiàn)示例
- Android開(kāi)發(fā)中的MVC設(shè)計(jì)模式淺析
- Android設(shè)計(jì)模式系列之組合模式
- Android設(shè)計(jì)模式系列之工廠方法模式
- Android開(kāi)發(fā)中的單例模式應(yīng)用詳解
相關(guān)文章
Android實(shí)用小技巧之利用Lifecycle寫(xiě)出更好維護(hù)的代碼
lifecycle是一個(gè)類(lèi),用于存儲(chǔ)有關(guān)組件(如Activity或Fragment)的生命周期狀態(tài)的信息,并允許其他對(duì)象觀察此狀態(tài),下面這篇文章主要給大家介紹了關(guān)于Android實(shí)用小技巧之利用Lifecycle寫(xiě)出更好維護(hù)的代碼的相關(guān)資料,需要的朋友可以參考下2022-05-05Android中ListView如何分頁(yè)加載數(shù)據(jù)
這篇文章主要介紹了Android中ListView如何分頁(yè)加載數(shù)據(jù),本文就結(jié)合實(shí)例來(lái)演示一下使用ListView獲取數(shù)據(jù)的過(guò)程,需要的朋友可以參考下2015-12-12android配合viewpager實(shí)現(xiàn)可滑動(dòng)的標(biāo)簽欄示例分享
本文主要介紹了android實(shí)現(xiàn)可滑動(dòng)的標(biāo)簽欄示例,配合viewpager作為標(biāo)簽欄,且可以設(shè)置每頁(yè)顯示的標(biāo)簽個(gè)數(shù),超出可滑動(dòng)顯示,需要的朋友可以參考下2014-02-02Android?Java?try?catch?失效問(wèn)題及解決
這篇文章主要介紹了Android?Java?try?catch?失效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Android繪制旋轉(zhuǎn)動(dòng)畫(huà)方法詳解
這篇文章主要介紹了Android如何采用RotateAnimation繪制一個(gè)旋轉(zhuǎn)動(dòng)畫(huà),文中的實(shí)現(xiàn)方法講解詳細(xì),感興趣的小伙伴可以跟隨小編一起試一試2022-01-01Android app開(kāi)發(fā)中的Fragment入門(mén)學(xué)習(xí)教程
這篇文章主要介紹了Android app開(kāi)發(fā)中的Fragment入門(mén)學(xué)習(xí)教程,包括Fragment的創(chuàng)建和XML布局文件中的Fragment定義等,需要的朋友可以參考下2016-02-02淺談Android PathMeasure詳解和應(yīng)用
本篇文章主要介紹了淺談Android PathMeasure詳解和應(yīng)用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01詳解Flutter?響應(yīng)式狀態(tài)管理框架GetX
這篇文章主要為大家介紹了Flutter?響應(yīng)式狀態(tài)管理框架GetX詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Android ViewPager撤消左右滑動(dòng)切換功能實(shí)現(xiàn)代碼
這篇文章主要介紹了Android ViewPager撤消左右滑動(dòng)切換功能實(shí)現(xiàn)代碼,需要的朋友可以參考下2017-04-04