您好,登錄后才能下訂單哦!
這篇“Unity游戲開發(fā)中的中介者模式怎么應用”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Unity游戲開發(fā)中的中介者模式怎么應用”文章吧。
隨著項目功能越多,系統(tǒng)切分越細,系統(tǒng)之間的溝通越復雜,這時系統(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)溝通時,都必須先將請求交給中央單位,再由中央單位分配給對應的子系統(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)點:
不會引入太多其他的系統(tǒng); 系統(tǒng)被依賴的程度也降低;
注意事項:
1、在某些情況下會出現(xiàn)中介者類擔任過多中介者角色而產(chǎn)生“操作接口爆炸”的情況,這時需要配合其他設(shè)計模式來處理。
2、中介者接口沒有繼承任何接口類。這樣對于所有游戲系統(tǒng)和玩家界面而言,它們所依賴的將是“接口”而不是“實現(xiàn)”,這樣會更符合開—閉原則(OCP),從而提高游戲系統(tǒng)和玩家界面的可移植性。
以上就是關(guān)于“Unity游戲開發(fā)中的中介者模式怎么應用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。