欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity游戲開發(fā)中的設(shè)計模式之策略模式

 更新時間:2023年05月05日 11:28:27   作者:iukam  
策略模式是Unity游戲開發(fā)中常用的設(shè)計模式之一,用于封裝一系列算法或行為,并使這些算法或行為可以相互替換。通過策略模式,可以在運行時動態(tài)地選擇算法或行為,實現(xiàn)游戲中的多樣性和可擴展性。常見的應(yīng)用包括AI行為、武器攻擊、移動方式等

一、使用策略模式的原因

在設(shè)計游戲角色傷害時,因角色差異而使用不同的計算公式,如何解決,同一計算方式分布在不同的角色中、新增角色增加維護(hù)等問題,可以使用策略模式解決。

二、策略模式的定義

GoF對策略模式的解釋:定義一組算法,并封裝每個算法,讓它們可以彼此交換使用。策略模式讓這些算法在客戶端使用它們時能更加獨立。

策略模式在處理所謂的“算法時”,著重于細(xì)節(jié),至于計算方式及規(guī)則,則不用去理會。

三、策略模式的使用說明

參與者說明:

  • Strategy(策略接口類):提供“策略客戶端”可以使用的方法。
  • ConcreteStrategyA~C(策略實現(xiàn)類): 不同算法的實現(xiàn)。
  • Context(策略客戶端):擁有一個Strategy類的對象引用,并且通過對象引用獲取想要的計算結(jié)果。

四、策略模式的實現(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>
        /// 設(shè)置算法
        /// </summary>
        /// <param name="strategy"></param>
        public void SetStrategy(Strategy strategy)
        {
            strategy = strategy;
        }
        /// <summary>
        ///執(zhí)行當(dāng)前的算法
        /// </summary>
        public void ContextInterface()
        {
            strategy.AlgorithmInterface();
        }
    }

五、中介者模式的優(yōu)點和注意事項

優(yōu)點:

  • 讓角色屬性變得好維護(hù);
  • 不必在針對角色類型編寫程序代碼;
  • 計算公式的替換更為方便;

缺點:

計算公式時的參數(shù)設(shè)置,需要外界提供相關(guān)信息作為計算依據(jù);

與狀態(tài)模式的差別:

都?xì)w類在行為模式(Behavior Patterns)分類下,都由一個Context類來維護(hù)對象的引用。

  • 差異: State是在一群狀態(tài)中進(jìn)行切換,狀態(tài)之間有對應(yīng)和連接的關(guān)系,而Strategy是由一群沒有任何關(guān)系的類組成,不知彼此的存在。
  • State受限于狀態(tài)機的切換規(guī)則,在設(shè)計初期就可能定義所有狀態(tài),后期追加,不是想加入就加入,受限于現(xiàn)有狀態(tài)關(guān)聯(lián);而Strategy是由封裝計算算法而形成的一種設(shè)計模式,算法之間不存在任何依賴關(guān)系,可以隨時加入。

六、策略模式的總結(jié)

將復(fù)雜的計算公式從客戶端中獨立出來稱為一個群組,之后客戶端可以按照情況來決定使用的計算公式策略,既提高系統(tǒng)應(yīng)用的靈活程度,也強化了系統(tǒng)中對所有計算策略的維護(hù)方式。

后續(xù)開發(fā)人員很容易找到相關(guān)計算公式的差異,同時修改點也會縮小到計算公式本身,也不會影響到使用的客戶端。

到此這篇關(guān)于Unity游戲開發(fā)中的設(shè)計模式之策略模式的文章就介紹到這了,更多相關(guān)Unity策略模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c#擴展datatable轉(zhuǎn)json示例

    c#擴展datatable轉(zhuǎn)json示例

    這篇文章主要介紹了c#擴展datatable轉(zhuǎn)json示例,需要的朋友可以參考下
    2014-05-05
  • Unity EasyTouch搖桿插件使用示例詳解

    Unity EasyTouch搖桿插件使用示例詳解

    這篇文章主要介紹了Unity EasyTouch搖桿插件使用,這套插件還支持雙指縮放,滑動,手指畫圈,點擊,多指觸碰,拖拽等,通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • 詳解如何通過wireshark實現(xiàn)捕獲C#上傳的圖片

    詳解如何通過wireshark實現(xiàn)捕獲C#上傳的圖片

    這篇文章主要為大家詳細(xì)介紹了如何通過wireshark實現(xiàn)捕獲C#上傳的圖片,文中的示例代碼簡潔易懂,具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以了解下
    2023-11-11
  • C#中的yield關(guān)鍵字詳解

    C#中的yield關(guān)鍵字詳解

    本文詳細(xì)講解了C#中的yield關(guān)鍵字,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#實現(xiàn)字母與ASCII碼互相轉(zhuǎn)換

    C#實現(xiàn)字母與ASCII碼互相轉(zhuǎn)換

    ASCII是基于拉丁字母的編碼系統(tǒng),也是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng),本文主要為大家詳細(xì)介紹了如何使用C#實現(xiàn)字母與ASCII碼互轉(zhuǎn),需要的可以參考下
    2024-01-01
  • 關(guān)于C#中ajax跨域訪問問題

    關(guān)于C#中ajax跨域訪問問題

    最近做項目,需要跨域請求訪問數(shù)據(jù)問題。下面通過本文給大家分享C#中ajax跨域訪問代碼詳解,需要的朋友可以參考下
    2017-05-05
  • c# 并行的實現(xiàn)示例

    c# 并行的實現(xiàn)示例

    本文主要介紹了c# 并行的實現(xiàn)示例,我們使用?Parallel.ForEach?方法并結(jié)合?File.ReadAllLines?來提高讀取速度,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • vs2019安裝和使用詳細(xì)圖文教程

    vs2019安裝和使用詳細(xì)圖文教程

    這篇文章主要介紹了vs2019安裝和使用詳細(xì)圖文教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C#中的數(shù)據(jù)結(jié)構(gòu)介紹

    C#中的數(shù)據(jù)結(jié)構(gòu)介紹

    這篇文章介紹了C#中的數(shù)據(jù)結(jié)構(gòu),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • C#定時器組件FluentScheduler用法

    C#定時器組件FluentScheduler用法

    這篇文章介紹了C#定時器插件FluentScheduler的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論