策略模式(Strategy Pattern)

官方概念:策略模式將可變的部分從程序中抽象分離成算法接口,在該接口下分別封裝一系列算法實(shí)現(xiàn)耳高,并使他們可以相互替換扎瓶,從而導(dǎo)致客戶端程序獨(dú)立于算法的改變。

設(shè)計原則:將應(yīng)用中需要變化的部分獨(dú)立成一個接口泌枪,這個接口在總體上規(guī)定了行為框架概荷,通過多態(tài)和接口實(shí)現(xiàn)類,多用組合碌燕,少用繼承误证,賦予程序?qū)拸V的擴(kuò)展性。

demo如下:
步驟一:通過分離變化得出策略接口
// 策略接口StrategyInterface
public interface StrategyInterface {
    void go();
}
步驟二:編寫策略接口實(shí)現(xiàn)類
// 策略接口實(shí)現(xiàn)類1
public class StrategyInterfaceImpl1 implements StrategyInterface{
    @Override
    public void go() {
        System.out.println("go1");
    }
}

// 策略接口實(shí)現(xiàn)類2
public class StrategyInterfaceImpl2 implements StrategyInterface {
    @Override
    public void go() {
        System.out.println("go2");
    }
}
步驟三:編寫實(shí)體父類
// 實(shí)體父類
public class PojoCar {
    // 注入接口
    private StrategyInterface strategyInterface;

    // 無參構(gòu)造
    public PojoCar() {
    }

    // 父類本身具有的方法
    public void showName(){
        System.out.println("這是輛車修壕!");
    }

    // 為接口提供setter方法
    public void setStrategyInterface(StrategyInterface strategyInterface) {
        this.strategyInterface = strategyInterface;
    }

    // 父類方法中調(diào)用策略接口中的方法
    public void goMethod(){
        strategyInterface.go();
    }
}
步驟四:編寫實(shí)體子類
// 實(shí)體子類
public class PojoCar1 extends PojoCar {

    // 子類重寫父類showName方法
    public void showName(){
        System.out.println("這是PojoCar1愈捅!");
    }

    // 子類調(diào)用父類無參構(gòu)造
    public PojoCar1() {
        super();
        // 調(diào)用setter方法,將策略接口的實(shí)現(xiàn)類注入
//        super.setStrategyInterface(new StrategyInterfaceImpl1());
        super.setStrategyInterface(new StrategyInterfaceImpl2());
    }
}
測試:
// 測試
public class Test {
   public static void main(String[] args) {
       PojoCar p = new PojoCar1();
       p.goMethod();// 調(diào)用goMethod
       p.showName();// 調(diào)用showName
   }
}
測試結(jié)果:執(zhí)行策略接口實(shí)現(xiàn)類2中定義的方法輸出go2
go2
這是PojoCar1慈鸠!

策略模式的優(yōu)點(diǎn):
1. 用組合的方式蓝谨,使架構(gòu)更加靈活
2. 富有彈性,可以較好應(yīng)對變化
3. 相對繼承青团,有更好的代碼復(fù)用性
4. 相對于抽象方法譬巫,無需在每個類中都重寫父類方法
5. 消除大量條件語句

策略模式缺點(diǎn):
1. 需要了解更多業(yè)務(wù)細(xì)節(jié)
2. 增加了類的數(shù)量,不便維護(hù)

適用場景:
1. 許多相關(guān)的類僅僅是行為差異
2. 運(yùn)行時需要選擇不同的算法變體
3. 通過條件語句在多個分支中選取一個

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末督笆,一起剝皮案震驚了整個濱河市芦昔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌胖腾,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘪松,死亡現(xiàn)場離奇詭異咸作,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宵睦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門记罚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人壳嚎,你說我怎么就攤上這事桐智∧┰纾” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵说庭,是天一觀的道長然磷。 經(jīng)常有香客問我,道長刊驴,這世上最難降的妖魔是什么姿搜? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮捆憎,結(jié)果婚禮上舅柜,老公的妹妹穿的比我還像新娘。我一直安慰自己躲惰,他們只是感情好致份,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著础拨,像睡著了一般氮块。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上太伊,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天雇锡,我揣著相機(jī)與錄音,去河邊找鬼僚焦。 笑死锰提,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的芳悲。 我是一名探鬼主播立肘,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼名扛!你這毒婦竟也來了谅年?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤肮韧,失蹤者是張志新(化名)和其女友劉穎融蹂,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弄企,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡超燃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拘领。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片意乓。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖约素,靈堂內(nèi)的尸體忽然破棺而出届良,到底是詐尸還是另有隱情笆凌,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布士葫,位于F島的核電站乞而,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏为障。R本人自食惡果不足惜晦闰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鳍怨。 院中可真熱鬧呻右,春花似錦、人聲如沸鞋喇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侦香。三九已至落塑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罐韩,已是汗流浹背憾赁。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留散吵,地道東北人龙考。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像矾睦,于是被迫代替她去往敵國和親晦款。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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

  • 【學(xué)習(xí)難度:★☆☆☆☆枚冗,使用頻率:★★★★☆】直接出處:策略模式梳理和學(xué)習(xí):https://github.com/...
    BruceOuyang閱讀 1,444評論 3 5
  • 1.初識策略模式 定義一系列的算法缓溅,把它們一個個封裝起來,并且使它們可相互替換赁温。本模式使得算法可獨(dú)立于使用它的客戶...
    王偵閱讀 1,450評論 0 3
  • 上一篇:015-CFBridgingRelease簡析 一坛怪、說白了 所謂策略模式(Strategy),說白了就是:...
    AncientMing閱讀 806評論 0 1
  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載 PS:轉(zhuǎn)載請注明出處作者: TigerChain地址: htt...
    TigerChain閱讀 1,485評論 4 12
  • 文/王西 時間把一個太陽分成了 日出和日落 晨曦和黃昏 山的對岸是山 霧起霧落 相視而立 在太陽看來 他們是永恒的...
    五月的石榴閱讀 188評論 0 3