91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unity游戲開發中的中介者模式怎么應用

發布時間:2023-05-05 11:21:38 來源:億速云 閱讀:190 作者:iii 欄目:開發技術

這篇“Unity游戲開發中的中介者模式怎么應用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Unity游戲開發中的中介者模式怎么應用”文章吧。

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

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

  • 單一系統引入太多其他系統的功能,不利于單一系統的轉換和維護;

  • 單一系統被過多的系統所依賴,不利于接口的更改,容易牽一發而動全身;

  • 因為需提供給其他系統操作,系統的接口可能過于龐大,不容易維護;

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

二、中介者模式的定義

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

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

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

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

Unity游戲開發中的中介者模式怎么應用

其中的參與者如下:

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

以上就是關于“Unity游戲開發中的中介者模式怎么應用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绿春县| 伊通| 南澳县| 慈溪市| 郁南县| 仁布县| 平舆县| 巴南区| 婺源县| 温州市| 卢龙县| 堆龙德庆县| 开平市| 溧水县| 安丘市| 沈丘县| 井陉县| 醴陵市| 襄垣县| 汝南县| 布尔津县| 湖口县| 离岛区| 舟山市| 古交市| 方城县| 栾川县| 宁强县| 福泉市| 托里县| 锦州市| 邳州市| 文化| 乌兰浩特市| 东丰县| 焉耆| 甘孜| 万山特区| 琼中| 吉安县| 忻州市|