精品熟女碰碰人人a久久,多姿,欧美欧美a v日韩中文字幕,日本福利片秋霞国产午夜,欧美成人禁片在线观看

Unity游戲開發中的中介者模式的應用與實現

unity游戲開發中的中介者模式的應用與實現

 

一、使用中介者模式的原因

隨著項目功能越多,系統切分越細,系統之間的溝通越復雜,這時系統內部如果一直保存這種狀態,就會產生如下缺點:

  • 單一系統引入太多其他系統的功能,不利于單一系統的轉換和維護;
  • 單一系統被過多的系統所依賴,不利于接口的更改,容易牽一發而動全身;
  • 因為需提供給其他系統操作,系統的接口可能過于龐大,不容易維護;

要解決上述問題,可以使用中介者模式的設計方法。

 

二、中介者模式的定義

中介者模式簡單解釋的話,比較類似于中央管理的概念:建一個信息集中的中心,任何子系統要與它的子系統溝通時,都必須先將請求交給中央單位,再由中央單位分配給對應的子系統。

中介者模式在gof中的說明:定義一個接口用來封裝一群對象的互動行為。中介者通過移除對象之間的引用,來減少它們之間的耦合度,并且能改變它們之間的互動獨立性。

 

三、中介者模式的使用說明

創建一個中介者模式的結構如圖:

其中的參與者如下:

colleague(同事接口)

  • 擁有一個mediator屬性成員,可以通過它來調用中介的功能。

concretecolleaguex(同事接口實現類)

  • 實現colleague界面的類,對于單一實現類而言,只會依賴一個mediator接口。

mediator(中介者接口)、concretemediator(中介者接口實現類)

  • 由mediator定義讓colleague類操作的接口。
  • concretemediator實現類中包含所有concretecolleague的對象引用。
  • concretemediator類之間的互動會在concretemediator中發生。

介紹一個gof范例程序如下:

colleague(同事接口)

  public abstract class colleague
  {
      protected mediator mediator = null;//通過mediator對外溝通
      public colleague(mediator mediator)
      {
          this.mediator = mediator;
      }
      /// <summary>
      /// mediator 請求通知
      /// </summary>
      public abstract void request(string message);
  }

colleague為抽象類,擁有一個類型為mediator的屬性成員mediator ,用來指向中介者,而這個中介者會在建造者中被指定。

實現各colleague類:

public class concretecolleague1:colleague
  {
      public concretecolleague1(mediator mediator):base(mediator)
      {
      }
      /// <summary>
      /// 執行動作
      /// </summary>
      public void action()
      {
          //執行后需要通知其他colleague
          mediator.sendmessage(this, "colleage1 發出通知");
      }
      /// <summary>
      /// mediator 通知請求
      /// </summary>
      /// <param name="message"></param>
      public override void request(string message)
      {
      }
  }
  public class concretecolleague2:colleague
  {
      public concretecolleague2(mediator mediator):base(mediator)
      {
      }
      /// <summary>
      /// 執行動作
      /// </summary>
      public void action()
      {
          //執行后需要通知其他colleague
          mediator.sendmessage(this, "colleage2 發出通知");
      }
      /// <summary>
      /// mediator 通知請求
      /// </summary>
      /// <param name="message"></param>
      public override void request(string message)
      {
      }
  }

每一個繼承自colleague的concretecolleaguex類,需要對外界溝通時,都會通過mediator來傳遞信息。

mediator接口,用來管理colleague對象的接口:

    public abstract class mediator
  {
      public abstract void sendmessage(colleague colleague, string message);
  }

mediator定義了一個抽象方法sendmessage(),主要用于從外界傳遞信息給colleague。

最后,實現concretemediator類,該類擁有所有“要在內部進行溝通的colleague子類的引用”:

    public class concretemediator:mediator
  {
      concretecolleague1 colleague1 = null;
      concretecolleague2 colleague2= null;
      public void setcolleague1(concretecolleague1 colleague1)
      {
          this.colleague1 = colleague1;
      }
      public void setcolleague2(concretecolleague2 colleague2)
      {
          this.colleague2 = colleague2;
      }
      /// <summary>
      /// 收到來自colleague請求
      /// </summary>
      public override void sendmessage(colleague colleague, string message)
      {
          //收到colleague1通知colleague2
          if (colleague1 == colleague)
              colleague2.request(message);
          //收到colleague2通知colleague1
          if (colleague2 == colleague)
              colleague1.request(message);
      }
  }

實現中介者模式的測試:

public class mediatortest
  {
      public void unittest()
      {
          //產生中介者
          concretemediator concretemediator = new concretemediator();
          //產生兩個colleague
          concretecolleague1 colleague1 = new concretecolleague1(concretemediator);
          concretecolleague2 colleague2 = new concretecolleague2(concretemediator);
          //設置給中介者
          concretemediator.setcolleague1(colleague1);
          concretemediator.setcolleague2(colleague2);
          //執行
          colleague1.action();
          colleague2.action();
      }
  }

 

四、中介者模式的優點和注意事項

中介者模式具備以下優點:

不會引入太多其他的系統; 系統被依賴的程度也降低;

注意事項:

1、在某些情況下會出現中介者類擔任過多中介者角色而產生“操作接口爆炸”的情況,這時需要配合其他設計模式來處理。

2、中介者接口沒有繼承任何接口類。這樣對于所有游戲系統和玩家界面而言,它們所依賴的將是“接口”而不是“實現”,這樣會更符合開—閉原則(ocp),從而提高游戲系統和玩家界面的可移植性。

總結:

中介者模式的優點是能讓系統之間的耦合度降低,提升系統的可維護性。但身為模式中的中介者角色類,也會存在接口過大的風險,此時必須配合其他模式來進行優化。

關于unity游戲開發中的中介者模式的應用與實現的文章就介紹至此,更多相關unity中介者模式內容請搜索碩編程以前的文章,希望以后支持碩編程

下一節:利用c#/vb.net實現ppt轉換為html

c# 教程

相關文章