最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2023年05月05日 10:31:48   作者:iukam  
中介者模式是Unity游戲開發(fā)中常用的設(shè)計模式之一,用于減少對象之間的直接耦合,通過引入中介者來協(xié)調(diào)對象之間的交互。通過中介者模式,游戲?qū)ο罂梢愿屿`活地進行交互和協(xié)同工作,降低系統(tǒng)復(fù)雜度,使代碼更加易于維護和擴展

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

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

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

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

二、中介者模式的定義

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

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

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

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

其中的參與者如下:

Colleague(同事接口)

  • 擁有一個Mediator屬性成員,可以通過它來調(diào)用中介的功能。

ConcreteColleagueX(同事接口實現(xiàn)類)

  • 實現(xiàn)Colleague界面的類,對于單一實現(xiàn)類而言,只會依賴一個Mediator接口。

Mediator(中介者接口)、ConcreteMediator(中介者接口實現(xiàn)類)

  • 由Mediator定義讓Colleague類操作的接口。
  • ConcreteMediator實現(xiàn)類中包含所有ConcreteColleague的對象引用。
  • ConcreteMediator類之間的互動會在ConcreteMediator中發(fā)生。

介紹一個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 ,用來指向中介者,而這個中介者會在建造者中被指定。

實現(xiàn)各Colleague類:

public class ConcreteColleague1:Colleague
    {
        public ConcreteColleague1(Mediator mediator):base(mediator)
        {
        }
        /// <summary>
        /// 執(zhí)行動作
        /// </summary>
        public void Action()
        {
            //執(zhí)行后需要通知其他Colleague
            mediator.SendMessage(this, "Colleage1 發(fā)出通知");
        }
        /// <summary>
        /// Mediator 通知請求
        /// </summary>
        /// <param name="message"></param>
        public override void Request(string message)
        {
        }
    }
    public class ConcreteColleague2:Colleague
    {
        public ConcreteColleague2(Mediator mediator):base(mediator)
        {
        }
        /// <summary>
        /// 執(zhí)行動作
        /// </summary>
        public void Action()
        {
            //執(zhí)行后需要通知其他Colleague
            mediator.SendMessage(this, "Colleage2 發(fā)出通知");
        }
        /// <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。

最后,實現(xiàn)ConcreteMediator類,該類擁有所有“要在內(nèi)部進行溝通的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);
        }
    }

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

public class MediatorTest
    {
        public void UnitTest()
        {
            //產(chǎn)生中介者
            ConcreteMediator concreteMediator = new ConcreteMediator();
            //產(chǎn)生兩個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)點和注意事項

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

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

注意事項:

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

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

總結(jié):

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

到此這篇關(guān)于Unity游戲開發(fā)中的中介者模式的應(yīng)用與實現(xiàn)的文章就介紹到這了,更多相關(guān)Unity中介者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

威信县| 军事| 高唐县| 荆州市| 林芝县| 彭泽县| 垫江县| 阿拉善左旗| 西和县| 宁晋县| 博爱县| 丹棱县| 临沧市| 华阴市| 灵宝市| 富平县| 石门县| 文登市| 麻江县| 张掖市| 自贡市| 西藏| 马尔康县| 本溪| 象州县| 京山县| 鄂伦春自治旗| 施甸县| 罗源县| 酒泉市| 广水市| 莆田市| 肇东市| 扎囊县| 长乐市| 宾川县| 绩溪县| 新昌县| 平江县| 武威市| 广元市|