日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

在王者荣耀角度下分析面向对象程序设计B中23种设计模式之策略模式

發布時間:2024/3/13 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 在王者荣耀角度下分析面向对象程序设计B中23种设计模式之策略模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

·

策略模式在王者榮耀中的應用

·

應用一:【登錄游戲前】選擇通過何種方式登錄游戲


應用二:【游戲開始前】選擇英雄及其召喚師技能


應用三:【游戲開始后】選擇使用普攻還是技能

一、簡述

登錄游戲前,玩家面臨選擇以QQ賬號登錄還是微信賬號登錄的問題,進一步來說,玩家還面臨著去哪一個區玩的問題;玩家開始游戲前,面臨著配合陣容選英雄及其召喚師技能的問題;進入游戲后,玩家會面臨根據戰況選擇使用一二三技能還是普攻,以及是否使用召喚師技能等問題。
完成一項任務,往往可以有多種不同的方式,每一種方式稱為一個策略,我們可以根據環境或者條件的不同選擇不同的策略來完成該項任務。
在上述3個實例中:

①登錄游戲前
為了完成登錄游戲任務,可以選擇QQ還是微信等多種方式;
②游戲開始前
為了滿足陣容科學任務,可以選擇相適應的英雄及其召喚師技能等多種組合方式;
③游戲開始后
為了取得團戰勝利任務,可以選擇使用普攻還是哪種技能等多種技能搭配方式。

下面著重對應用二(游戲開始前)實例做詳細介紹……

二、策略模式(Strategy Pattern)

策略模式理解:
高度概括:定義一系列算法,把它們一個個封裝起來,并且使它們可相互替換。本模式使得算法獨立于使用它的客戶而變化。
通常我們可以用策略模式解決此類問題:由于用戶需求的變化,導致經常需要修改類中的某個方法的方法體(需要不斷地變換算法),為了避免這種痛苦的修改代碼,我們就可以通過接口或抽象類封裝算法的標識(在接口中定義一個抽象方法),實現該接口的類將實現接口中的抽象方法。策略模式把針對一個算法標識的一系列具體算法分別封裝在不同類中,使得各個類給出的具體算法可以相互替換。

策略模式結構中的三種角色:
·策略(Strategy):是一個接口,定義若干個算法標識(抽象方法);
·具體策略(ConcreteStrategy):是實現策略接口的類,給出算法標識的具體算法;
·上下文(Context):是依賴于策略接口的類(包含策略聲明的變量),上下文提供一個方法,該方法委托策略變量調用具體策略實現策略接口中的方法。

策略模式的UML類圖:

策略模式的優缺點:
優點:
①上下文和具體策略是松耦合關系;
②滿足“開—閉原則”;
③架構靈活;
缺點:
增加了對象的數目,致使對象數目增多

三、王者榮耀角度下實現策略模式結構圖及代碼

實現此策略模式的UML類圖

eclipse結構圖

主函數【應用(Application)】
Application.java

package angle_strategy;import angle_strategy.QualifyingCompetition; import angle_strategy.Hero; import angle_strategy.StaregyDiaochanJinghua; import angle_strategy.StaregyHouyiKuangbao; import angle_strategy.StaregyLibaiChengji; import angle_strategy.StaregyMachaoJipao; import angle_strategy.StaregyMingshiyinZhiliao;public class Application {public static void main(String[] args) {QualifyingCompetition game=new QualifyingCompetition(); //上下文對象Hero diaochan=new Hero();diaochan.setName("貂蟬"); //貂蟬凈化diaochan.setSkill("凈化");diaochan.setDialogue("無盡的舞蹈何日方休");Hero houyi=new Hero();houyi.setName("后羿"); //后羿狂暴houyi.setSkill("狂暴");houyi.setDialogue("周日被我射熄火了,所以今天是周一");Hero libai=new Hero();libai.setName("李白"); //李白懲擊libai.setSkill("懲擊");libai.setDialogue("鳳兮鳳兮歸故鄉,遨游四海求其凰");Hero machao=new Hero();machao.setName("馬超"); //馬超疾跑machao.setSkill("疾跑");machao.setDialogue("我的槍去而復返,你的生命有去無回");Hero mingshiyin=new Hero();mingshiyin.setName("明世隱"); //明世隱治療mingshiyin.setSkill("治療");mingshiyin.setDialogue("血管里,流淌著忘川之水");System.out.println("");System.out.println("我打哪個位置都可以,你們先選,我補位!");System.out.println("-----------------------------------------------");game.setStrategy(new StaregyDiaochanJinghua()); //上下文對象使用策略一System.out.println("當最后剩余【法師】位時:");System.out.printf("我選擇【%s】,我帶的召喚師技能是【%s】\n",diaochan.getName(),diaochan.getSkill());System.out.printf("選擇后觸發英雄臺詞:%s\n",diaochan.getDialogue());System.out.println("-----------------------------------------------");game.setStrategy(new StaregyHouyiKuangbao()); //上下文對象使用策略二System.out.println("當最后剩余【射手】位時:");System.out.printf("我選擇【%s】,我帶的召喚師技能是【%s】\n",houyi.getName(),houyi.getSkill());System.out.printf("選擇后觸發英雄臺詞:%s\n",houyi.getDialogue());System.out.println("-----------------------------------------------");game.setStrategy(new StaregyLibaiChengji()); //上下文對象使用策略三System.out.println("當最后剩余【打野】位時:");System.out.printf("我選擇【%s】,我帶的召喚師技能是【%s】\n",libai.getName(),libai.getSkill());System.out.printf("選擇后觸發英雄臺詞:%s\n",libai.getDialogue());System.out.println("-----------------------------------------------");game.setStrategy(new StaregyMachaoJipao()); //上下文對象使用策略四System.out.println("當最后剩余【戰士/坦克】位時:");System.out.printf("我選擇【%s】,我帶的召喚師技能是【%s】\n",machao.getName(),machao.getSkill());System.out.printf("選擇后觸發英雄臺詞:%s\n",machao.getDialogue());System.out.println("-----------------------------------------------");game.setStrategy(new StaregyMingshiyinZhiliao()); //上下文對象使用策略五System.out.println("當最后剩余【輔助】位時:");System.out.printf("我選擇【%s】,我帶的召喚師技能是【%s】\n",mingshiyin.getName(),mingshiyin.getSkill());System.out.printf("選擇后觸發英雄臺詞:%s\n",mingshiyin.getDialogue());}}class Hero{String name,skill,dialogue;public void setName(String s){name=s;}public void setSkill(String t){skill=t;}public void setDialogue(String v){dialogue=v;}public String getDialogue(){return dialogue;}public String getName(){return name;}public String getSkill(){return skill;}}

策略(Strategy)
ChoosesStaregy.java

package angle_strategy;/*角色1:策略 */public interface ChoosesStaregy {public abstract String whichChooses(String a); }

具體策略(ConcreteStrategy)
StaregyDiaochanJinghua.java

package angle_strategy; /*角色2.1:具體策略 (缺法師,補位貂蟬,召喚師技能帶凈化) */ public class StaregyDiaochanJinghua implements ChoosesStaregy {public String whichChooses(String a){return a;} }

StaregyHouyiKuangbao.java

package angle_strategy; /*角色2.2:具體策略 (缺射手,補位后羿,召喚師技能帶狂暴) */ public class StaregyHouyiKuangbao implements ChoosesStaregy {public String whichChooses(String a){return a;}}

StaregyLibaiChengji.java

package angle_strategy; /*角色2.3:具體策略 (缺打野,補位李白,召喚師技能帶懲擊) */ public class StaregyLibaiChengji implements ChoosesStaregy {public String whichChooses(String a){return a;} }

StaregyMachaoJipao,java

package angle_strategy; /*角色2.4:具體策略 (缺邊路,補位馬超,召喚師技能帶疾跑) */ public class StaregyMachaoJipao implements ChoosesStaregy {public String whichChooses(String a){return a;} }

StaregyMingshiyinZhiliao,java

package angle_strategy; /*角色2.5:具體策略(缺輔助,補位明世隱,召喚師技能帶治療) */ public class StaregyMingshiyinZhiliao implements ChoosesStaregy {public String whichChooses(String a){return a;} }

上下文(Context)
QualifyingCompetition.java

package angle_strategy;/*角色3:上下文 (排位比賽) */import angle_strategy.ChoosesStaregy;public class QualifyingCompetition {ChoosesStaregy strategy;public void setStrategy(ChoosesStaregy strategy){this.strategy=strategy;}public String getPlayerChooses(String a){if(strategy!=null)return strategy.whichChooses(a);elsereturn null;}}

運行結果截圖

更多設計模式在王者榮耀中的應用請點擊我的→設計模式在王者榮耀中的應用專欄

歡迎留言,一起交流學習

感謝閱讀

END

總結

以上是生活随笔為你收集整理的在王者荣耀角度下分析面向对象程序设计B中23种设计模式之策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。