震驚捞高!居然有如此容易理解的——策略模式

在有多種算法相似的情況下,我們使用 if...else的話就會有很多缺點:
1.進行多次判斷渣锦,效率極其低下
2.可擴展性太差硝岗,維護起來實在是很費勁

Q:那么如何去解決這個問題呢?
A:使用策略模式泡挺,利用封裝性辈讶,將算法封裝起來,使用的時候去替換就可以了娄猫。

步驟如下:

1.寫一個策略接口
2.寫n個實現(xiàn)類贱除,去實現(xiàn)接口(具體數(shù)量看需求)
3.寫一個Context類,這個類承上啟下
4.決定我們使用的策略媳溺,并靈活運用

說起來步驟來比較費勁月幌,其實代碼實現(xiàn)的話還是蠻容易理解的:

代碼

步驟1:寫個策略接口,這里面我就寫了一個方法悬蔽。大家可以按需求寫

/**
 * Created by AceCream on 2017/3/29.
 * 策略接口
 */
public interface Strategy {
    public String operate(String s);
}

步驟2:寫n個實現(xiàn)類扯躺,去實現(xiàn)接口(具體數(shù)量看需求)
這里寫的比較暴力,三個類都是蝎困,直接使用字符串做參數(shù)這樣比較直觀录语。其實真正使用的時候可以按照自己喜好去改變。

/**
 * Created by AceCream on 2017/3/29.
 */
public class OperationOne implements Strategy{

    @Override
    public String operate(String s) {
        s = "第一個策略禾乘!......"+ s;
        return s;
    }

}

class OperationTwo implements Strategy{

    @Override
    public String operate(String s) {
        s = "第二個策略澎埠!......." + s;
        return s;
    }
}

class OperationThree implements Strategy{

    @Override
    public String operate(String s) {
        s = "第三個策略!......" + s ;
        return s;
    }
}

步驟3:寫Context類
這個Context類厲害了始藕!請注意這個類是承上啟下的:
1.構(gòu)造函數(shù)里傳的參數(shù)是具體的策略蒲稳,在我們實例化Context的時候氮趋,我們可以通過改變參數(shù)的方式,去決定我們需要的策略江耀。
2.我在這個類中寫了個執(zhí)行策略的方法“executeStrategy(String s)”
這就意味著剩胁,在客戶端傳具體需要處理的數(shù)據(jù)之前我們已經(jīng)把策略決定好了,傳過來的數(shù)據(jù)可以在我們決定的策略中去執(zhí)行祥国!

/**
 * Created by AceCream on 2017/3/29.
 */
public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public String executeStrategy(String s){
        return strategy.operate(s);
    }

}

步驟4:決定我們使用的策略昵观,并靈活運用。其實就是測試一下
package 策略模式;

/**
 * Created by AceCream on 2017/3/29.
 */
public class Test {
    public static void main(String[] args) {
        Context context;

        context = new Context(new OperationOne());
        System.out.println(context.executeStrategy("草船借箭!"));

        context = new Context(new OperationTwo());
        System.out.println(context.executeStrategy("過河拆橋!"));

        context = new Context(new OperationThree());
        System.out.println(context.executeStrategy("順手牽羊!"));

    }
}

效果

測試圖

總結(jié)

這里總結(jié)一下:

所屬:行為型模式

  • 意圖:定義一系列的算法,把它們一個個封裝起來, 并且使它們可相互替換系宫。
  • 主要解決:在有多種算法相似的情況下索昂,使用 if...else 所帶來的復雜和難以維護。
  • 何時使用:一個系統(tǒng)有許多許多類扩借,而區(qū)分它們的只是他們直接的行為椒惨。
  • 如何解決:將這些算法封裝成一個一個的類,任意地替換潮罪。
  • 關鍵代碼:實現(xiàn)同一個接口康谆。
  • 優(yōu)點:
    1、算法可以自由切換嫉到。
    2沃暗、避免使用多重條件判斷。
    3何恶、擴展性良好孽锥。
  • 缺點:
    1、策略類會增多细层。
    2惜辑、所有策略類都需要對外暴露。

參考:
菜鳥教程
大話設計模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疫赎,一起剝皮案震驚了整個濱河市盛撑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捧搞,老刑警劉巖抵卫,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胎撇,居然都是意外死亡介粘,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門晚树,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碗短,“玉大人,你說我怎么就攤上這事题涨≠怂” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵纲堵,是天一觀的道長巡雨。 經(jīng)常有香客問我,道長席函,這世上最難降的妖魔是什么铐望? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮茂附,結(jié)果婚禮上正蛙,老公的妹妹穿的比我還像新娘。我一直安慰自己营曼,他們只是感情好乒验,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒂阱,像睡著了一般锻全。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上录煤,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天鳄厌,我揣著相機與錄音,去河邊找鬼妈踊。 笑死了嚎,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的廊营。 我是一名探鬼主播歪泳,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼赘风!你這毒婦竟也來了夹囚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤邀窃,失蹤者是張志新(化名)和其女友劉穎荸哟,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞬捕,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡鞍历,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肪虎。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劣砍。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扇救,靈堂內(nèi)的尸體忽然破棺而出刑枝,到底是詐尸還是另有隱情香嗓,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布装畅,位于F島的核電站靠娱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掠兄。R本人自食惡果不足惜像云,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蚂夕。 院中可真熱鬧迅诬,春花似錦、人聲如沸婿牍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牍汹。三九已至铐维,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間慎菲,已是汗流浹背嫁蛇。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留露该,地道東北人睬棚。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像解幼,于是被迫代替她去往敵國和親抑党。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

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