策略模式 (Strategy)

舉例說(shuō)明:

/**
 * 作者:wanglei 
 * 郵箱:229846388@qq.com
 * 策略模式
 * 義抽象策略角色(Strategy):百貨公司所有促銷(xiāo)活動(dòng)的共同接口
 */
public abstract class Strategy {
    public abstract void show();
}
/**
 * 作者:wanglei 
 * 郵箱:229846388@qq.com
 * 策略模式
 * 定義具體策略角色(Concrete Strategy):每個(gè)節(jié)日具體的促銷(xiāo)活動(dòng)
 */
public class StrategyA extends Strategy{
    //為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)A
    @Override
    public void show() {
        System.out.println("為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)A");
    }
}
/**
 * 作者:wanglei
 * 郵箱:229846388@qq.com
 * 策略模式
 * 定義具體策略角色(Concrete Strategy):每個(gè)節(jié)日具體的促銷(xiāo)活動(dòng)
 */
public class StrategyB extends Strategy {
    //為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)B
    @Override
    public void show() {
        System.out.println("為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)B");
    }
}
/**
 * 作者:wanglei 
 * 郵箱:229846388@qq.com
 * 策略模式
 * 定義具體策略角色(Concrete Strategy):每個(gè)節(jié)日具體的促銷(xiāo)活動(dòng)
 */
public class StrategyC extends Strategy {
    //為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)C
    @Override
    public void show() {
        System.out.println("為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)C");
    }
}
/**
 * 作者:wanglei 
 * 郵箱:229846388@qq.com
 * 策略模式
 * 定義環(huán)境角色(Context):用于連接上下文相速,即把促銷(xiāo)活動(dòng)推銷(xiāo)給客戶(hù)奥务,這里可以理解為銷(xiāo)售員
 */
public class Context_SalesMan {

    //持有抽象策略角色的引用
    private Strategy strategy;

    //生成銷(xiāo)售員實(shí)例時(shí)告訴銷(xiāo)售員什么節(jié)日(構(gòu)造方法)
    //使得讓銷(xiāo)售員根據(jù)傳入的參數(shù)(節(jié)日)選擇促銷(xiāo)活動(dòng)(這里使用一個(gè)簡(jiǎn)單的工廠模式)
    public Context_SalesMan(String festival){
        switch (festival){
            case "A":
                strategy = new StrategyA();
                break;
            case "B":
                strategy = new StrategyB();
                break;
            case "C":
                strategy = new StrategyC();
                break;
            default:
                break;
        }
    }

    /**
     * 向客戶(hù)展示促銷(xiāo)活動(dòng)
     */
    public void SalesManShow(){
        strategy.show();
    }
}
/**
 * 作者:wanglei 
 * 郵箱:229846388@qq.com
 * 策略模式
 * 定義:
 * 1.定義一系列算法蚕冬,將每個(gè)算法封裝到具有公共接口的一系列策略類(lèi)中,從而使它們可以相互替換蓄坏,并讓算法可以在不影響到客戶(hù)端的情況下發(fā)生變化。
 * 2.簡(jiǎn)單來(lái)說(shuō),就是“準(zhǔn)備一組算法,并將每一個(gè)算法封裝起來(lái)窗宦,使得它們可以互換”
 * 作用(解決的問(wèn)題):
 * 1.使得客戶(hù)端可以根據(jù)外部條件選擇不同策略來(lái)解決不同問(wèn)題
 * 2.策略模式僅僅封裝算法(包括添加 & 刪除),但策略模式并不決定在何時(shí)使用何種算法二鳄,算法的選擇由客戶(hù)端來(lái)決定
 * 3.將算法的責(zé)任和本身進(jìn)行解耦對(duì)算法進(jìn)行封裝赴涵,將算法的責(zé)任和算法本身分割開(kāi),委派給不同的對(duì)象管理泥从。
 * 4.讓算法和對(duì)象分開(kāi)來(lái),使得算法可以獨(dú)立于使用它的客戶(hù)而變化
 * 實(shí)例講解:
 * a. 實(shí)例概況
 * 背景:小成有一家百貨公司沪摄,最近在定年度的促銷(xiāo)活動(dòng)
 * 沖突:每個(gè)節(jié)日用同一個(gè)促銷(xiāo)活動(dòng)太枯燥躯嫉,沒(méi)吸引力
 * 解決方案:針對(duì)不同節(jié)目使用不同促銷(xiāo)活動(dòng)進(jìn)行促銷(xiāo)
 */
public class SimplePattern {

    public static void main(String[] args) {
        Context_SalesMan salesMan;

        salesMan = new Context_SalesMan("A");
        salesMan.SalesManShow();

        salesMan = new Context_SalesMan("B");
        salesMan.SalesManShow();

        salesMan = new Context_SalesMan("C");
        salesMan.SalesManShow();
    }
}

/**
 * 結(jié)果:
 * 為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)A
 * 為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)B
 * 為春節(jié)準(zhǔn)備的促銷(xiāo)活動(dòng)C
 * 優(yōu)點(diǎn):
 * 1.策略類(lèi)之間可以自由切換由于策略類(lèi)都實(shí)現(xiàn)同一個(gè)接口,所以使它們之間可以自由切換杨拐。
 * 2.易于擴(kuò)展增加一個(gè)新的策略只需要添加一個(gè)具體的策略類(lèi)即可祈餐,基本不需要改變?cè)械拇a,符合“開(kāi)閉原則“
 * 3.避免使用多重條件選擇語(yǔ)句(if else)哄陶,充分體現(xiàn)面向?qū)ο笤O(shè)計(jì)思想帆阳。
 * 缺點(diǎn):
 * 1.客戶(hù)端必須知道所有的策略類(lèi),并自行決定使用哪一個(gè)策略類(lèi)屋吨。
 * 2.策略模式將造成產(chǎn)生很多策略類(lèi)蜒谤,可以通過(guò)使用享元模式在一定程度上減少對(duì)象的數(shù)量。
 * 應(yīng)用場(chǎng)景:
 * 1.一個(gè)系統(tǒng)需要?jiǎng)討B(tài)地在幾種算法中選擇一種的情況
 * 2.如果在一個(gè)系統(tǒng)里面有許多類(lèi)至扰,它們之間的區(qū)別僅在于它們的行為鳍徽,那么使用策略模式可以動(dòng)態(tài)地讓一個(gè)對(duì)象在許多行為中選擇一種行為
 * 3.如果一個(gè)對(duì)象有很多的行為,如果不使用合適的模式敢课,這些行為就只好使用多重的if-else語(yǔ)句來(lái)實(shí)現(xiàn)阶祭,此時(shí),可以使用策略模式直秆,把這些行為轉(zhuǎn)移到相應(yīng)的具體策略類(lèi)里面濒募,就可以避免使用難以維護(hù)的多重條件選擇語(yǔ)句,并體現(xiàn)面向?qū)ο笊婕暗母拍睢? * 4.不希望客戶(hù)端知道復(fù)雜的圾结、與算法相關(guān)的數(shù)據(jù)結(jié)構(gòu)瑰剃,在具體策略類(lèi)中封裝算法和相關(guān)的數(shù)據(jù)結(jié)構(gòu),提高算法的保密性與安全性筝野。
 */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末培他,一起剝皮案震驚了整個(gè)濱河市鹃两,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舀凛,老刑警劉巖俊扳,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異猛遍,居然都是意外死亡馋记,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)懊烤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)梯醒,“玉大人,你說(shuō)我怎么就攤上這事腌紧∪紫埃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵壁肋,是天一觀的道長(zhǎng)号胚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)浸遗,這世上最難降的妖魔是什么猫胁? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮跛锌,結(jié)果婚禮上弃秆,老公的妹妹穿的比我還像新娘。我一直安慰自己髓帽,他們只是感情好菠赚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著郑藏,像睡著了一般锈至。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上译秦,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天峡捡,我揣著相機(jī)與錄音,去河邊找鬼筑悴。 笑死们拙,一個(gè)胖子當(dāng)著我的面吹牛阁吝,可吹牛的內(nèi)容都是我干的迈窟。 我是一名探鬼主播热芹,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼爹耗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼擎厢!你這毒婦竟也來(lái)了铆惑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后迄损,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账磺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年芹敌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垮抗。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氏捞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出冒版,到底是詐尸還是另有隱情液茎,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布辞嗡,位于F島的核電站捆等,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏欲间。R本人自食惡果不足惜楚里,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一断部、第九天 我趴在偏房一處隱蔽的房頂上張望猎贴。 院中可真熱鬧,春花似錦蝴光、人聲如沸她渴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)趁耗。三九已至,卻和暖如春疆虚,著一層夾襖步出監(jiān)牢的瞬間苛败,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工径簿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留罢屈,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓缠捌,卻偏偏與公主長(zhǎng)得像译蒂,于是被迫代替她去往敵國(guó)和親谊却。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哑芹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 版權(quán)聲明:本文為博主原創(chuàng)文章勿决,未經(jīng)博主允許不得轉(zhuǎn)載 PS:轉(zhuǎn)載請(qǐng)注明出處作者: TigerChain地址: htt...
    TigerChain閱讀 1,511評(píng)論 4 12
  • 1.策略模式簡(jiǎn)介 策略模式(Strategy Patter)是行為型(Behavioral)設(shè)計(jì)模式低缩,策略模式封裝...
    郭尋撫閱讀 798評(píng)論 1 1
  • 1 場(chǎng)景問(wèn)題# 1.1 報(bào)價(jià)管理## 向客戶(hù)報(bào)價(jià)曹货,對(duì)于銷(xiāo)售部門(mén)的人來(lái)講顶籽,這是一個(gè)非常重大、非常復(fù)雜的問(wèn)題礼饱,對(duì)不同的...
    七寸知架構(gòu)閱讀 5,079評(píng)論 9 62
  • 策略模式提供了一種可插入式(Pluggable)算法的實(shí)現(xiàn)方案镊绪。 類(lèi)型 行為型 參與者 Context(環(huán)境類(lèi)):...
    lyu571閱讀 357評(píng)論 0 2
  • 根據(jù)圖片url獲取圖片尺寸 獲取PNG圖片size 獲取GIF圖片size 獲取JPG圖片size
    IOSCoderYummy閱讀 833評(píng)論 0 0