C#設計模式之中介者模式
前言
中介者模式是一個很好理解的模式,我們身邊最形象的例子就是房介。
中介者模式
英文:Mediator
用一箇中介物件來封裝一系列的物件互動。中介者使各個物件不需要顯式的相互引用,從而使其耦合鬆散,而且可以獨立的改變它們之間的互動。
場景
現在最火熱的話題,租房。
我們現在一般找房源都會通過中介,可以說是一個簡捷的橋樑。我們和房主之間可能不會直接談合同,而是由中介在中間做一些工作,以達到使雙方都滿意的效果。這樣也避免了我們和房主之間的一些不愉快,雖然在中介這裡可能會有一些費用(時間),但是也省去了雙方都跑腿和周旋了。
優缺點
中介者模式很容易在系統中應用,也很容易在系統中誤用。當系統出現“多對多”互動複雜的物件群時,不要急於使用中介者模式,而是先要反思系統在設計上是否合理。
優點:
減少了耦合,可以獨立改變和複用類。
缺點:
具體中介者類因為物件的越來越多,變得太複雜,不容易維護。
應用
一般應用於一組物件以定義良好但是複雜的方式進行通訊的場合,以及想制定一個分佈在多個類中的行為,而又不想生成太多的子類的場合。
程式碼展示
抽象中介者類:
//聯合國機構類
abstract class UniteNations
{
//宣告
public abstract void Declare(string message, Country colleague);
}
抽象同事類:
//國家類-----抽象
abstract class Country
{
protected UniteNations mediator;
public Country(UniteNations mediator)
{
this.mediator = mediator;
}
}
具體中介者類:
//聯合國類----具體中介者
class UnitedNationSecurityCouncil:UniteNations
{
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 USA:Country
{
public USA(UniteNations mediator)
: base(mediator)
{ }
//宣告
public void Declare(string message)
{
mediator.Declare(message, this);
}
//獲得訊息
public void GetMessage(string message)
{
Console.WriteLine("美國獲得對方資訊:"+message );
}
}
//伊拉克---具體---同美國↑
class Iraq:Country
{
public Iraq(UniteNations mediator)
: base(mediator)
{ }
//宣告
public void Declare(string message)
{
mediator.Declare(message, this);
}
//獲得訊息
public void GetMessage(string message)
{
Console.WriteLine("伊拉克獲得對方資訊:"+message);
}
}
客戶端程式碼
class Program
{
static void Main(string[] args)
{
UnitedNationSecurityCouncil UNSC = new UnitedNationSecurityCouncil();
USA c1 = new USA(UNSC);
Iraq c2 = new Iraq(UNSC);
UNSC.Colleague1 = c1;
UNSC.Colleague2 = c2;
c1.Declare("不準研製核武器,否則要發動戰爭!");
c2.Declare("我們滅有核武器,也不怕侵略。");
Console.Read();
}
}
效果圖:
後記
也祝願在聯合國這個中介者的協調下,世界不再有戰爭,永遠和平充滿愛!
相關文章
- C#設計模式(16)——中介者模式C#設計模式
- 設計模式之中介者模式設計模式
- 軟體設計模式系列之十九——中介者模式設計模式
- C#設計模式之訪問者模式C#設計模式
- 極簡設計模式-中介者模式設計模式
- 設計模式實戰 - 中介者模式設計模式
- 設計模式-行為型模式-中介者模式設計模式
- 設計模式(十七)中介者設計模式
- 設計模式之中介者設計模式
- Java進階篇設計模式之十 ---- 訪問者模式和中介者模式Java設計模式
- Java學設計模式之中介者模式Java設計模式
- 設計模式學習(十八)中介者模式設計模式
- Android原始碼設計模式-中介者模式Android原始碼設計模式
- 設計模式----中介模式設計模式
- 設計模式-中介模式設計模式
- C#設計模式之命令模式C#設計模式
- 18.java設計模式之中介者模式Java設計模式
- 設計模式(十九)——中介者模式(智慧家庭案例)設計模式
- 設計模式 | 中介者模式及典型應用設計模式
- 設計模式之中介者模式(行為型)設計模式
- 折騰Java設計模式之中介者模式Java設計模式
- C#設計模式之單例模式C#設計模式單例
- C#設計模式之享元模式C#設計模式
- C#設計模式之狀態模式C#設計模式
- C#設計模式之組合模式C#設計模式
- C#設計模式之迭代器模式C#設計模式
- Rust語言之GoF設計模式:中介者Mediator模式RustGo設計模式
- 設計模式之【建造者模式】設計模式
- 設計模式之建造者模式設計模式
- C#設計模式-建造者模式(Builder Pattern)C#設計模式UI
- C#設計模式(17)——觀察者模式C#設計模式
- C#設計模式之職責鏈模式C#設計模式
- C#設計模式之介面卡模式C#設計模式
- 設計模式之裝飾者模式設計模式
- 設計模式之【觀察者模式】設計模式
- 設計模式之觀察者模式設計模式
- 設計模式之-觀察者模式設計模式
- 設計模式之建造者模式(BuilderPattern)設計模式UI