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

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

 

一、使用策略模式的原因

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

 

二、策略模式的定義

gof對(duì)策略模式的解釋:定義一組算法,并封裝每個(gè)算法,讓它們可以彼此交換使用。策略模式讓這些算法在客戶端使用它們時(shí)能更加獨(dú)立。

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

 

三、策略模式的使用說明

參與者說明:

  • strategy(策略接口類):提供“策略客戶端”可以使用的方法。
  • concretestrategya~c(策略實(shí)現(xiàn)類): 不同算法的實(shí)現(xiàn)。
  • context(策略客戶端):擁有一個(gè)strategy類的對(duì)象引用,并且通過對(duì)象引用獲取想要的計(jì)算結(jié)果。

 

四、策略模式的實(shí)現(xiàn)范例

算法的共享接口:

 	/// <summary>
  /// 算法的共享接口
  /// </summary>
  public abstract class strategy
  {
      public abstract void algorithminterface();
  }

實(shí)現(xiàn)各種算法:

   /*  各類算法的實(shí)現(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對(duì)象的客戶端

/// <summary>
  /// 擁有strategy 對(duì)象的客戶端
  /// </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)點(diǎn)和注意事項(xiàng)

優(yōu)點(diǎn):

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

缺點(diǎn):

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

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

都?xì)w類在行為模式(behavior patterns)分類下,都由一個(gè)context類來維護(hù)對(duì)象的引用。

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

 

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

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

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

關(guān)于unity游戲開發(fā)中的設(shè)計(jì)模式之策略模式的文章就介紹至此,更多相關(guān)unity策略模式內(nèi)容請(qǐng)搜索碩編程以前的文章,希望以后支持碩編程!

下一節(jié):unity游戲開發(fā)中的橋接模式

c# 教程

相關(guān)文章
亚洲国产精品第一区二区,久久免费视频77,99V久久综合狠狠综合久久,国产免费久久九九免费视频