Android設(shè)計模式:策略設(shè)計模式

  • 策略模式定義了一系列的算法觅丰,并將一系列算法封裝起來,使他們能相互替換。策略模式讓算法獨立于使用者而獨立變化式廷。

(1)策略設(shè)計模式實現(xiàn)

  • 聲明一個接口,聲明一個計算方法
public interface CalculateStrategy {
    int calculatePrice(int km);
}
  • 實現(xiàn)三個具體的計算方法
public class BusCalculate implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        int busP = 2;
        if (km>5)
            busP = busP+km-5;
        return busP;
    }
}

public class SubwayCalculate implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        int subwayP=0;
        if (km<5)
            subwayP = 3;
        if (km>5&&km<=10)
            subwayP=4;
        if (km>10)
            subwayP=5;
        return subwayP;
    }
}

public class TaxiCalculate implements CalculateStrategy {
    @Override
    public int calculatePrice(int km) {
        return  2 * km;
    }
}
  • 創(chuàng)建一個計算類
public class PriceCalculate {
   private  CalculateStrategy calculateStrategy;
    public void setCalculateStrategy(CalculateStrategy calculateStrategy){
        this.calculateStrategy = calculateStrategy;
    }

    public int getPrice(int km){
       return calculateStrategy.calculatePrice(km);
    }
}
  • 代碼調(diào)用實現(xiàn)
        PriceCalculate priceCalculate = new PriceCalculate();
        priceCalculate.setCalculateStrategy(new SubwayCalculate());
        int price = priceCalculate.getPrice(10);
        System.out.println(price);

優(yōu)點

  • 使用策略模式可以避免使用多重條件轉(zhuǎn)移語句芭挽,封裝更徹底滑废,數(shù)據(jù)更安全。
  • 策略模式提供了管理相關(guān)的算法族的辦法袜爪。策略類的等級結(jié)構(gòu)定義了一個算法或行為族蠕趁。恰當(dāng)使用繼承可以把公共的代碼移到父類里面,從而避免重復(fù)的代碼辛馆。
  • 耦合度低俺陋,都是基于接口調(diào)用和實現(xiàn),便于拓展和修改昙篙。

缺點

  • 策略模式造成很多的策略類腊状。有時候可以通過把依賴于環(huán)境的狀態(tài)保存到客戶端里面,而將策略類設(shè)計成可共享的苔可,這樣策略類實例可以被不同客戶端使用缴挖。
  • 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類硕蛹。這就意味著客戶端必須理解這些算法的區(qū)別醇疼,以便適時選擇恰當(dāng)?shù)乃惴?/li>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市法焰,隨后出現(xiàn)的幾起案子秧荆,更是在濱河造成了極大的恐慌,老刑警劉巖埃仪,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乙濒,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機颁股,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門么库,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人甘有,你說我怎么就攤上這事诉儒。” “怎么了亏掀?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵忱反,是天一觀的道長。 經(jīng)常有香客問我滤愕,道長温算,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任间影,我火速辦了婚禮注竿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘魂贬。我一直安慰自己巩割,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布随橘。 她就那樣靜靜地躺著喂分,像睡著了一般。 火紅的嫁衣襯著肌膚如雪机蔗。 梳的紋絲不亂的頭發(fā)上蒲祈,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天,我揣著相機與錄音萝嘁,去河邊找鬼梆掸。 笑死,一個胖子當(dāng)著我的面吹牛牙言,可吹牛的內(nèi)容都是我干的酸钦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼咱枉,長吁一口氣:“原來是場噩夢啊……” “哼卑硫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蚕断,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤欢伏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亿乳,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硝拧,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡径筏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了障陶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滋恬。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖抱究,靈堂內(nèi)的尸體忽然破棺而出恢氯,到底是詐尸還是另有隱情,我是刑警寧澤鼓寺,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布酿雪,位于F島的核電站,受9級特大地震影響侄刽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朋凉,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一州丹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧杂彭,春花似錦墓毒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至团秽,卻和暖如春主胧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背习勤。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工踪栋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人图毕。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓夷都,卻偏偏與公主長得像,于是被迫代替她去往敵國和親予颤。 傳聞我的和親對象是個殘疾皇子囤官,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

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

  • 設(shè)計模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計原則時需要注意以下幾點:a) 高內(nèi)聚、低耦合和單一職能的“沖突”實際上蛤虐,這兩者...
    彥幀閱讀 3,735評論 0 14
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,730評論 25 707
  • 用兩張圖告訴你党饮,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料? 從這篇文章中你...
    hw1212閱讀 12,699評論 2 59
  • 莫克跪到地上俯下身去笆焰,左手撐著劫谅,右手伸進床底來回摸索。冰涼的水泥地面讓他的手掌、膝蓋和耳朵都感到舒服捏检≤衤浚“應(yīng)該是在這...
    半個橘子不夠吃閱讀 551評論 1 6
  • age = raw_input("How old are you?")height = raw_input("Ho...
    黑色茄子閱讀 122評論 0 0