您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何深入理解Java設計模式的中介者模式,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。
中介者作為一種行為設計模式,它公開一個統一的接口,系統的不同對象或組件可以通過該接口進行通信。增加一個中介者對象后,所有的相關對象通過中介者對象來通信,而不是互相引用,所以當一個對象發生改變時,只需要通知中介者對象即可。
Mediator
:中介者接口。在里面定義各個同事之間交互需要的方法,可以是公共的通訊方法,比如changed方法,大家都用,也可以是小范圍的交互方法。
ConcreteMediator
:具體中介者實現對象。它需要了解并維護各個同事對象,并負責具體的協調各同事對象的交互關系。
Colleague
:同事類的定義,通常實現成為抽象類,主要負責約束同事對象的類型,并實現一些具體同事類之間的公共功能,比如:每個具體同事類都應該知道中介者對象,也就是具體同事類都會持有中介者對象,就可以定義到這個類里面。
ConcreteColleague
:具體的同事類,實現自己的業務,在需要與其它同事通訊的時候,就與持有的中介者通信,中介者會負責與其它的同事交互。
優點: 減少各個Colleague之間的耦合,使得可以獨立地改變和復用各個Colleague類和Mediator
缺點:中介者模式的缺點是顯而易見的,因為這個“中介“承擔了較多的責任,所以一旦這個中介對象出現了問題,那么整個系統就會受到重大的影響。
1. 一組定義良好的對象,現在要進行復雜的通信。
2. 定制一個分布在多個類中的行為,而又不想生成太多的子類。
可以看出,中介對象主要是用來封裝行為的,行為的參與者就是那些對象,但是通過中介者,這些對象不用相互知道。
1. 中介者模式與業務相關,訂閱/發布模式與業務無關。
2. 兩個模式都有集中調度效果,對象之間不直接參與通信。
安理會做中介
聯合國機構類--Mediator類
//聯合國機構 abstract class UnitedNations { //聲明 public abstract void Declare(string message, Country colleague); }
國家類--Colleague類
//國家 abstract class Country { protected UnitedNations mediator; public Country(UnitedNations mediator) { this.mediator = mediator; } }
美國類--ConcreteColleague類
//美國 class USA : Country { public USA(UnitedNations mediator) : base(mediator) { } //聲明 public void Declare(string message) { mediator.Declare(message, this); } //獲取消息 public void GetMessage(string message) { Console.WriteLine("美國獲得對方消息:" + message); } }
伊拉克類--ConcreteColleague類
//伊拉克 class Iraq : Country { public Iraq(UnitedNations mediator) : base(mediator) { } //聲明 public void Declare(string message) { mediator.Declare(message, this); } //獲取消息 public void GetMessage(string message) { Console.WriteLine("伊拉克獲得對方消息:" + message); } }
聯合國安理會--ConcreteMediator類
//聯合國安全理事會 class UnitedNationsSecurity : UnitedNations { private USA colleague1; private Iraq colleague2; //美國 public USA Colleague1 { set { colleague1 = value; } } //伊拉克 public Iraq Colleague2 { set { colleague2 = value; } } public override void Declare(string message, Country colleague) { if (colleague == colleague1) { colleague2.GetMessage(message); } else { colleague1.GetMessage(message); } } }
客戶端代碼
class Program { //客戶端代碼 static void Main(string[] args) { UnitedNationsSecurity UNSC = new UnitedNationsSecurity(); USA c1 = new USA(UNSC); Iraq c2 = new Iraq(UNSC); UNSC.Colleague1 = c1; UNSC.Colleague2 = c2; c1.Declare("不準研發核武器,否則開戰"); c2.Declare("沒研發,開戰就開戰"); Console.Read(); } }
伊拉克獲得對方消息:不準研發核武器,否則開戰
美國獲得對方消息:沒研發,開戰就開戰
上述就是小編為大家分享的如何深入理解Java設計模式的中介者模式了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。