策略模式

  • 意義:分別封裝行為接口,實(shí)現(xiàn)算法組集歇,超類里放行為接口對(duì)象揩悄,在子類里具體設(shè)定行為對(duì)象。原則就是:分離變化部分鬼悠,封裝接口删性,基于接口編程各種功能。此模式讓行為算法的變化獨(dú)立與算法的使用者焕窝。
  • UML:


    image.png
  • 環(huán)境(Context)角色:持有一個(gè)Strategy的引用蹬挺。
  • 抽象策略(Strategy)角色:這是一個(gè)抽象角色,通常由一個(gè)-
    接口或抽象類實(shí)現(xiàn)它掂。此角色給出所有的具體策略類所需的接口巴帮。
  • 具體策略(ConcreteStrategy)角色:包裝了相關(guān)的算法或行為。
  • 設(shè)計(jì)模型:鴨子
  • 特點(diǎn): 鴨子有的會(huì)飛虐秋,有的不會(huì)飛榕茧。有的會(huì)叫,有的不會(huì)叫客给。但都會(huì)游泳
    鴨子基類設(shè)計(jì):
public abstract class Duck {
       //定義抽象行為
    FlyBehavior mFlyBehavior;
    QuackBehavior mQuackBehavior;
    public Duck() {}
    public void Fly() {
        mFlyBehavior.fly();
    }
    public void Quack() {
        mQuackBehavior.quack();
    }
    public abstract void display();
    public void SetQuackBehavoir(QuackBehavior qb) {
        mQuackBehavior = qb;
    }
    public void SetFlyBehavoir(FlyBehavior fb) {
        mFlyBehavior = fb;
    }
    public void swim() {
        System.out.println("~~im swim~~");
    }
}

行為組設(shè)計(jì):

//飛行接口
public interface FlyBehavior {
    void fly();
}
//壞的飛行
public class    BadFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("--BadFly--");
    }
}
//好的飛行
public class    GoodFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("--GoodFly--");
    }
}
//不會(huì)飛
public class    NoFlyBehavior implements FlyBehavior{
    @Override
    public void fly() {
        // TODO Auto-generated method stub
        System.out.println("--NoFly--");
    }
}

叫聲行為組設(shè)計(jì):

//叫聲接口
public  interface QuackBehavior {
    void quack();
}
//嘎嘎叫
public  class GaGaQuackBehavior implements QuackBehavior{
    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("__GaGa__");
    }   
}
//咯咯叫
public  class GeGeQuackBehavior implements QuackBehavior{
    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("__GeGe__");
    }
}
//不會(huì)叫
public  class NoQuackBehavior implements QuackBehavior{
    @Override
    public void quack() {
        // TODO Auto-generated method stub
        System.out.println("__NoQuack__");
    }
}

實(shí)現(xiàn)了不同行為策略的鴨子

//綠頭鴨會(huì)飛用押,還會(huì)嘎嘎叫
public class GreenHeadDuck extends Duck {
    public GreenHeadDuck() {
        mFlyBehavior = new GoodFlyBehavior();
        mQuackBehavior = new GaGaQuackBehavior();
    }
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("**GreenHead**");
    }
}
//紅頭鴨子不會(huì)飛,但是會(huì)咯咯叫
public class RedHeadDuck extends Duck {
    public RedHeadDuck() {
        mFlyBehavior = new BadFlyBehavior();
        mQuackBehavior = new GeGeQuackBehavior();
    }
    @Override
    public void display() {
        // TODO Auto-generated method stub
        System.out.println("**RedHead**");
    }
}

有了這些行為組之后靶剑,我們?cè)诙x具體的鴨子時(shí)蜻拨,只需要組合不同的具體行為,父類就能幫我們調(diào)用具體的行為桩引。這樣的好處缎讼,子類能充分復(fù)用共同的行為代碼,并且能夠隨意組合各種行為坑匠,還將變化的行為分離出來(lái)血崭,對(duì)行為的擴(kuò)展是開(kāi)發(fā)的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厘灼,一起剝皮案震驚了整個(gè)濱河市夹纫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌手幢,老刑警劉巖捷凄,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異围来,居然都是意外死亡跺涤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)监透,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)桶错,“玉大人,你說(shuō)我怎么就攤上這事胀蛮≡旱螅” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵粪狼,是天一觀的道長(zhǎng)退腥。 經(jīng)常有香客問(wèn)我任岸,道長(zhǎng),這世上最難降的妖魔是什么狡刘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任享潜,我火速辦了婚禮,結(jié)果婚禮上嗅蔬,老公的妹妹穿的比我還像新娘剑按。我一直安慰自己,他們只是感情好澜术,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布艺蝴。 她就那樣靜靜地躺著,像睡著了一般鸟废。 火紅的嫁衣襯著肌膚如雪猜敢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,184評(píng)論 1 308
  • 那天侮攀,我揣著相機(jī)與錄音锣枝,去河邊找鬼。 笑死兰英,一個(gè)胖子當(dāng)著我的面吹牛撇叁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播畦贸,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陨闹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了薄坏?” 一聲冷哼從身側(cè)響起趋厉,我...
    開(kāi)封第一講書(shū)人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎胶坠,沒(méi)想到半個(gè)月后君账,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沈善,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年乡数,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闻牡。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡净赴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出罩润,到底是詐尸還是另有隱情玖翅,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站金度,受9級(jí)特大地震影響应媚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜猜极,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一珍特、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧魔吐,春花似錦、人聲如沸莱找。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)奥溺。三九已至辞色,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浮定,已是汗流浹背相满。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桦卒,地道東北人立美。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像方灾,于是被迫代替她去往敵國(guó)和親建蹄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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

  • 1 場(chǎng)景問(wèn)題# 1.1 報(bào)價(jià)管理## 向客戶報(bào)價(jià)裕偿,對(duì)于銷(xiāo)售部門(mén)的人來(lái)講洞慎,這是一個(gè)非常重大、非常復(fù)雜的問(wèn)題嘿棘,對(duì)不同的...
    七寸知架構(gòu)閱讀 5,092評(píng)論 9 62
  • 1 場(chǎng)景問(wèn)題 1.1 報(bào)價(jià)管理 向客戶報(bào)價(jià)劲腿,對(duì)于銷(xiāo)售部門(mén)的人來(lái)講,這是一個(gè)非常重大鸟妙、非常復(fù)雜的問(wèn)題焦人,對(duì)不同的客戶要...
    4e70992f13e7閱讀 3,091評(píng)論 2 16
  • 本文僅僅為入門(mén),高手勿噴圆仔。 實(shí)際工作中垃瞧,我們總會(huì)遇到類似如下的需求:某支付系統(tǒng)接入以下幾種商戶進(jìn)行充值:易寶網(wǎng)易,...
    JarvanMo閱讀 14,240評(píng)論 14 26
  • 目錄 本文的結(jié)構(gòu)如下: 引言 什么是策略模式 模式的結(jié)構(gòu) 典型代碼 代碼示例 策略模式和模板方法模式的區(qū)別 優(yōu)點(diǎn)和...
    w1992wishes閱讀 862評(píng)論 1 7
  • 2016年11月19日坪郭,星期六个从, 【高慧財(cái)富無(wú)為戰(zhàn)法】趙總[玫瑰]邀請(qǐng)到無(wú)為戰(zhàn)法創(chuàng)始人!無(wú)為金融職業(yè)學(xué)校董事長(zhǎng)【無(wú)...
    beijingyxd閱讀 294評(píng)論 0 0