黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

Unity游戲開(kāi)發(fā)中的中介者模式的應(yīng)用與實(shí)現(xiàn)

unity游戲開(kāi)發(fā)中的中介者模式的應(yīng)用與實(shí)現(xiàn)

 

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

隨著項(xiàng)目功能越多,系統(tǒng)切分越細(xì),系統(tǒng)之間的溝通越復(fù)雜,這時(shí)系統(tǒng)內(nèi)部如果一直保存這種狀態(tài),就會(huì)產(chǎn)生如下缺點(diǎn):

  • 單一系統(tǒng)引入太多其他系統(tǒng)的功能,不利于單一系統(tǒng)的轉(zhuǎn)換和維護(hù);
  • 單一系統(tǒng)被過(guò)多的系統(tǒng)所依賴(lài),不利于接口的更改,容易牽一發(fā)而動(dòng)全身;
  • 因?yàn)樾杼峁┙o其他系統(tǒng)操作,系統(tǒng)的接口可能過(guò)于龐大,不容易維護(hù);

要解決上述問(wèn)題,可以使用中介者模式的設(shè)計(jì)方法。

 

二、中介者模式的定義

中介者模式簡(jiǎn)單解釋的話,比較類(lèi)似于中央管理的概念:建一個(gè)信息集中的中心,任何子系統(tǒng)要與它的子系統(tǒng)溝通時(shí),都必須先將請(qǐng)求交給中央單位,再由中央單位分配給對(duì)應(yīng)的子系統(tǒng)。

中介者模式在gof中的說(shuō)明:定義一個(gè)接口用來(lái)封裝一群對(duì)象的互動(dòng)行為。中介者通過(guò)移除對(duì)象之間的引用,來(lái)減少它們之間的耦合度,并且能改變它們之間的互動(dòng)獨(dú)立性。

 

三、中介者模式的使用說(shuō)明

創(chuàng)建一個(gè)中介者模式的結(jié)構(gòu)如圖:

其中的參與者如下:

colleague(同事接口)

  • 擁有一個(gè)mediator屬性成員,可以通過(guò)它來(lái)調(diào)用中介的功能。

concretecolleaguex(同事接口實(shí)現(xiàn)類(lèi))

  • 實(shí)現(xiàn)colleague界面的類(lèi),對(duì)于單一實(shí)現(xiàn)類(lèi)而言,只會(huì)依賴(lài)一個(gè)mediator接口。

mediator(中介者接口)、concretemediator(中介者接口實(shí)現(xiàn)類(lèi))

  • 由mediator定義讓colleague類(lèi)操作的接口。
  • concretemediator實(shí)現(xiàn)類(lèi)中包含所有concretecolleague的對(duì)象引用。
  • concretemediator類(lèi)之間的互動(dòng)會(huì)在concretemediator中發(fā)生。

介紹一個(gè)gof范例程序如下:

colleague(同事接口)

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

colleague為抽象類(lèi),擁有一個(gè)類(lèi)型為mediator的屬性成員mediator ,用來(lái)指向中介者,而這個(gè)中介者會(huì)在建造者中被指定。

實(shí)現(xiàn)各colleague類(lèi):

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

每一個(gè)繼承自colleague的concretecolleaguex類(lèi),需要對(duì)外界溝通時(shí),都會(huì)通過(guò)mediator來(lái)傳遞信息。

mediator接口,用來(lái)管理colleague對(duì)象的接口:

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

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

最后,實(shí)現(xiàn)concretemediator類(lèi),該類(lèi)擁有所有“要在內(nèi)部進(jìn)行溝通的colleague子類(lèi)的引用”:

    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>
      /// 收到來(lái)自colleague請(qǐng)求
      /// </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);
      }
  }

實(shí)現(xiàn)中介者模式的測(cè)試:

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

 

四、中介者模式的優(yōu)點(diǎn)和注意事項(xiàng)

中介者模式具備以下優(yōu)點(diǎn):

不會(huì)引入太多其他的系統(tǒng); 系統(tǒng)被依賴(lài)的程度也降低;

注意事項(xiàng):

1、在某些情況下會(huì)出現(xiàn)中介者類(lèi)擔(dān)任過(guò)多中介者角色而產(chǎn)生“操作接口爆炸”的情況,這時(shí)需要配合其他設(shè)計(jì)模式來(lái)處理。

2、中介者接口沒(méi)有繼承任何接口類(lèi)。這樣對(duì)于所有游戲系統(tǒng)和玩家界面而言,它們所依賴(lài)的將是“接口”而不是“實(shí)現(xiàn)”,這樣會(huì)更符合開(kāi)—閉原則(ocp),從而提高游戲系統(tǒng)和玩家界面的可移植性。

總結(jié):

中介者模式的優(yōu)點(diǎn)是能讓系統(tǒng)之間的耦合度降低,提升系統(tǒng)的可維護(hù)性。但身為模式中的中介者角色類(lèi),也會(huì)存在接口過(guò)大的風(fēng)險(xiǎn),此時(shí)必須配合其他模式來(lái)進(jìn)行優(yōu)化。

關(guān)于unity游戲開(kāi)發(fā)中的中介者模式的應(yīng)用與實(shí)現(xiàn)的文章就介紹至此,更多相關(guān)unity中介者模式內(nèi)容請(qǐng)搜索碩編程以前的文章,希望以后支持碩編程!

下一節(jié):利用c#/vb.net實(shí)現(xiàn)ppt轉(zhuǎn)換為html

c# 教程

相關(guān)文章