英雄聯(lián)盟之「策略模式」

之前寫過一篇什么是「設計模式」铣口?隙轻,沒有類圖胜茧,沒有代碼室叉,有些同學說看不太懂抑片,今天給大家?guī)聿呗阅J剑ㄓ袌D卵佛,有碼,有真相!)截汪。

英雄聯(lián)盟(LOL)
玩過LOL的同學都知道疾牲,LOL有上百個英雄,如果用OO技術(shù)來設計這些英雄該怎么辦衙解?
小明:簡單阳柔,先來個父類(Superclass),然后讓所有的英雄繼承此父類蚓峦,不同的方法重寫父類方法即可舌剂。


每個英雄的QWER技能都是不一樣的,重寫可以沒問題暑椰,但是召喚師技能每個英雄都是固定的幾個難不成也都要子類重寫霍转?
小明:對哦,召喚師技能如果都讓子類重寫那么就會產(chǎn)生多個子類代碼重復一汽,怎么辦呢避消?

設計原則:找出應用可能需要變化之處,把它們獨立出來召夹,不要和那些不需要變化的代碼混在一起岩喷。

小明:變化之處那就是召喚師技能,可以把召喚師技能抽取出來寫成一個接口戳鹅,所有召喚師技能都需要實現(xiàn)這個接口均驶。

設計原則:針對接口編程,而不是針對實現(xiàn)編程枫虏。

小明:這樣可以把所有固定的召喚師技能先寫好妇穴,等玩家選擇召喚師技能只需要設置具體的召喚師技能即可。就算以后有新的召喚師技能只需要實現(xiàn)這個接口就好了隶债,具體實現(xiàn)類可以互相的替換腾它。

設計原則:多用組合,少用繼承死讹。

小明:思路理清楚了瞒滴,那就直接上代碼。

召喚師技能接口

public interface 召喚師技能 { 

public void 技能();

}

具體實現(xiàn)

public class 治療術(shù) implements 召喚師技能 {

public void 技能(){
  //為你的英雄和附近的友軍回復生命值赞警。
};

}

英雄類

public class 英雄 {

   public void 召喚師技能(召喚師技能 技能){
      技能變量.技能();
   }
}

客戶端

public class 客戶端 { 
public static void main(String[] args) { 
//選擇并創(chuàng)建需要使用的策略對象 
召喚師技能 我的治療術(shù) = new 治療術(shù)(); 
//創(chuàng)建環(huán)境 
英雄 我的蓋倫 = new 蓋倫(); 
//使用策略
我的蓋倫.召喚師技能(我的治療術(shù));
 }
}

這就是所謂的「策略模式」了妓忍,定義了算法(召喚師技能接口),分別封裝起來(具體的實現(xiàn)類:傳送愧旦、治療術(shù))世剖,讓他們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶笤虫。

以上代碼塊用中文編寫類名旁瘫、變量名是為了讓大家更好的理解祖凫,在實戰(zhàn)過程中記得替換成相對應的英文。

畫圖工具:
Giffy Diagrams
相關閱讀:
BRVAH之添加動畫(策略模式)
擴展閱讀:
如何實施代碼重構(gòu)酬凳?
參考書籍:
《Head First 設計模式》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末惠况,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宁仔,更是在濱河造成了極大的恐慌稠屠,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件台诗,死亡現(xiàn)場離奇詭異完箩,居然都是意外死亡赐俗,警方通過查閱死者的電腦和手機拉队,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來阻逮,“玉大人粱快,你說我怎么就攤上這事∈宥螅” “怎么了事哭?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瓜富。 經(jīng)常有香客問我鳍咱,道長,這世上最難降的妖魔是什么与柑? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任谤辜,我火速辦了婚禮,結(jié)果婚禮上价捧,老公的妹妹穿的比我還像新娘丑念。我一直安慰自己,他們只是感情好结蟋,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布脯倚。 她就那樣靜靜地躺著,像睡著了一般嵌屎。 火紅的嫁衣襯著肌膚如雪推正。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天宝惰,我揣著相機與錄音植榕,去河邊找鬼。 笑死掌测,一個胖子當著我的面吹牛内贮,可吹牛的內(nèi)容都是我干的产园。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼夜郁,長吁一口氣:“原來是場噩夢啊……” “哼什燕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起竞端,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤屎即,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后事富,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體技俐,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年统台,在試婚紗的時候發(fā)現(xiàn)自己被綠了雕擂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡贱勃,死狀恐怖井赌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贵扰,我是刑警寧澤仇穗,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站戚绕,受9級特大地震影響纹坐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舞丛,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一耘子、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧瓷马,春花似錦拴还、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至怀骤,卻和暖如春费封,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蒋伦。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工弓摘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痕届。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓韧献,卻偏偏與公主長得像末患,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子锤窑,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

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

  • 1璧针、策略模式是把算法分離出來,解決的問題是如果很多類都有同一個算法渊啰,那么就不需要每個類都覆蓋一次探橱。而是改成把算法(...
    maige閱讀 218評論 1 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,499評論 25 707
  • 曾經(jīng)我也是一名玩農(nóng)藥的大學生,但現(xiàn)在已經(jīng)棄了绘证,別問我為什么(被坑爹隊友坑的哭隧膏。。嚷那。)胞枕。而今天我們來把讓農(nóng)藥變榮耀,...
    Wizey閱讀 3,739評論 0 10
  • 文/一肆 每當周邊的人忙他們的事,留我一人時湖员,都會問我,你一個人不會無聊吧瑞驱? 我總會說娘摔,放心吧,我永遠不會覺得無聊...
    一肆閱讀 779評論 0 8
  • 每日一抽 第2天·21天告別拖延 #玩卡不卡·每日一抽# 每一位都可以通過這張卡片覺察自己: 1唤反、直覺他叫什么名字...
    vivipet閱讀 114評論 0 0