Unity游戲開發(fā)中的設計模式之策略模式
unity游戲開發(fā)中的設計模式之策略模式
一、使用策略模式的原因
在設計游戲角色傷害時,因角色差異而使用不同的計算公式,如何解決,同一計算方式分布在不同的角色中、新增角色增加維護等問題,可以使用策略模式解決。
二、策略模式的定義
gof對策略模式的解釋:定義一組算法,并封裝每個算法,讓它們可以彼此交換使用。策略模式讓這些算法在客戶端使用它們時能更加獨立。
策略模式在處理所謂的“算法時”,著重于細節(jié),至于計算方式及規(guī)則,則不用去理會。
三、策略模式的使用說明
參與者說明:
- strategy(策略接口類):提供“策略客戶端”可以使用的方法。
- concretestrategya~c(策略實現(xiàn)類): 不同算法的實現(xiàn)。
- context(策略客戶端):擁有一個strategy類的對象引用,并且通過對象引用獲取想要的計算結果。
四、策略模式的實現(xiàn)范例
算法的共享接口:
/// <summary> /// 算法的共享接口 /// </summary> public abstract class strategy { public abstract void algorithminterface(); }
實現(xiàn)各種算法:
/* 各類算法的實現(xiàn) */ /// <summary> /// 算法 a /// </summary> public class concretestrategya : strategy { public override void algorithminterface() { //print } } /// <summary> /// 算法 b /// </summary> public class concretestrategyb : strategy { public override void algorithminterface() { //print } } /// <summary> /// 算法 c /// </summary> public class concretestrategyc : strategy { public override void algorithminterface() { //print } }
擁有strategy對象的客戶端
/// <summary> /// 擁有strategy 對象的客戶端 /// </summary> public class context { strategy strategy = null; /// <summary> /// 設置算法 /// </summary> /// <param name="strategy"></param> public void setstrategy(strategy strategy) { strategy = strategy; } /// <summary> ///執(zhí)行當前的算法 /// </summary> public void contextinterface() { strategy.algorithminterface(); } }
五、中介者模式的優(yōu)點和注意事項
優(yōu)點:
- 讓角色屬性變得好維護;
- 不必在針對角色類型編寫程序代碼;
- 計算公式的替換更為方便;
缺點:
計算公式時的參數設置,需要外界提供相關信息作為計算依據;
與狀態(tài)模式的差別:
都歸類在行為模式(behavior patterns)分類下,都由一個context類來維護對象的引用。
- 差異: state是在一群狀態(tài)中進行切換,狀態(tài)之間有對應和連接的關系,而strategy是由一群沒有任何關系的類組成,不知彼此的存在。
- state受限于狀態(tài)機的切換規(guī)則,在設計初期就可能定義所有狀態(tài),后期追加,不是想加入就加入,受限于現(xiàn)有狀態(tài)關聯(lián);而strategy是由封裝計算算法而形成的一種設計模式,算法之間不存在任何依賴關系,可以隨時加入。
六、策略模式的總結
將復雜的計算公式從客戶端中獨立出來稱為一個群組,之后客戶端可以按照情況來決定使用的計算公式策略,既提高系統(tǒng)應用的靈活程度,也強化了系統(tǒng)中對所有計算策略的維護方式。
后續(xù)開發(fā)人員很容易找到相關計算公式的差異,同時修改點也會縮小到計算公式本身,也不會影響到使用的客戶端。
關于unity游戲開發(fā)中的設計模式之策略模式的文章就介紹至此,更多相關unity策略模式內容請搜索碩編程以前的文章,希望以后支持碩編程!