設(shè)計(jì)模式-策略模式

emmm.. 什么叫策略模式呢? 我接下會來通過吃雞的武器來給大家講解竿裂,以便于大家理解什么是策略模式

策略模式的定義

策略模式是一種面向接口編程,讓每一個接口互相沒有關(guān)聯(lián)麻削,卻可以互相替換致讥。也可以相當(dāng)于說一種行為與算法

UML類圖

enter image description here
  • Arsenat 上下文類憎瘸,用來實(shí)現(xiàn)與替換策略(相當(dāng)于Android中常用的BaseActivity)
  • Weapon 策略的抽象類
  • WeaponM16A4,WeaponM416 抽象的具體事例類

具體代碼實(shí)現(xiàn)

在我們吃雞的時候,我們跳傘之后會拾取到很多武器,這些武器有一個共同的特點(diǎn)就是 都能開槍射擊(shoot),但是我們角色(Arsenat)有時候一局游戲中可能會更換(setWeapon)很多種武器, 但是開槍一個特征所有武器都是持有的. 從策略模式的角度來分析的話富岳,我們更換武器 只需更換武器的引用蛔糯,這就是上面所說面向接口編程 會降低耦合 方便之后擴(kuò)展

策略抽象Weapon

public interface Weapon {
    /**
     * 射擊
     */
    void shoot();
}

策略實(shí)例WeaponXXX

public class WeaponAKM implements Weapon {
    @Override
    public void shoot() {
        System.out.println("AKM 擊殺了 xxx");
    }
}

public class WeaponM16A4 implements Weapon {
    @Override
    public void shoot() {
        System.out.println("M16A4 擊殺了 xxx");
    }
}

Arsenat

 public class Arsenat {

    private Weapon mWeapon;

    public Arsenat(Weapon mWeapon) {
        this.mWeapon = mWeapon;
    }

    public void setWeapon(Weapon weapon) {
        mWeapon = weapon;
    }


    public void action() {
        mWeapon.shoot();
    }
}

運(yùn)行

public static void main(String[] args) {
        Arsenat arsenat = new Arsenat(new WeaponAKM());
        //擊殺
        arsenat.action();
        //舔包 換武器
        arsenat.setWeapon(new WeaponM16A4());
        arsenat.action();
        }

 //Log

AKM 擊殺了 xxx
M16A4 擊殺了 xxx

總結(jié)

通過簡單的代碼實(shí)例,我們基本能夠理解什么是策略模式,代碼雖然非常簡單,但是設(shè)計(jì)模式是一種思想,我們要學(xué)會如果運(yùn)用這種思想到平常的編碼提高我們的設(shè)計(jì)和架構(gòu)能力窖式。

策略模式
優(yōu)點(diǎn): 對于較為復(fù)雜的業(yè)務(wù)邏輯顯得更為直觀蚁飒,擴(kuò)展也更為方便
缺點(diǎn): 如果策略過多,子類相對就回比較臃腫,如果需要大量子類,謹(jǐn)慎使用

Demo地址

參考資料

Android設(shè)計(jì)模式源碼解析之策略模式

Head First 設(shè)計(jì)模式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市萝喘,隨后出現(xiàn)的幾起案子淮逻,更是在濱河造成了極大的恐慌,老刑警劉巖阁簸,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件爬早,死亡現(xiàn)場離奇詭異,居然都是意外死亡启妹,警方通過查閱死者的電腦和手機(jī)筛严,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饶米,“玉大人桨啃,你說我怎么就攤上這事∶适洌” “怎么了照瘾?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丧慈。 經(jīng)常有香客問我析命,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任碳却,我火速辦了婚禮队秩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昼浦。我一直安慰自己馍资,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布关噪。 她就那樣靜靜地躺著鸟蟹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪使兔。 梳的紋絲不亂的頭發(fā)上建钥,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音虐沥,去河邊找鬼熊经。 笑死,一個胖子當(dāng)著我的面吹牛欲险,可吹牛的內(nèi)容都是我干的镐依。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼天试,長吁一口氣:“原來是場噩夢啊……” “哼槐壳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起喜每,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤务唐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后带兜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枫笛,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年刚照,在試婚紗的時候發(fā)現(xiàn)自己被綠了崇堰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡涩咖,死狀恐怖海诲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情檩互,我是刑警寧澤特幔,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站闸昨,受9級特大地震影響蚯斯,放射性物質(zhì)發(fā)生泄漏薄风。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一拍嵌、第九天 我趴在偏房一處隱蔽的房頂上張望遭赂。 院中可真熱鬧,春花似錦横辆、人聲如沸撇他。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽困肩。三九已至,卻和暖如春脆侮,著一層夾襖步出監(jiān)牢的瞬間锌畸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工靖避, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留潭枣,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓幻捏,卻偏偏與公主長得像卸耘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粘咖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評論 2 345

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