中介者模式

2022-03-06 21:28:08 字數 1388 閱讀 2921

中介者模式:用乙個中介物件來封裝一系列的物件互動,使得這些物件之間不需要顯式地互相引用,從而鬆散這些物件間的耦合。

其實如果使用.net的winform或webfom做開發的話,我們經常會用到中介者模式。而這個中介者就是form窗體。試想一下,如果我們在form窗體裡拖了倆個控制項,乙個label,乙個button,我們想點選button的時候改變label的text屬性。想必大家都覺得很簡單。但實際上,我們拖動這倆控制項到form上時,是new了倆例項在form裡面,然後在button的click事件所註冊的方法裡面獲取label例項,然後設定label的text的屬性。而button的click事件所註冊的方法是位於form裡的,所以label與button的互動是在form裡互動的。試想一下,如果在button裡面new 乙個label例項,然後在button裡對label設定text屬性,是不可能的,因為這裡只是與label互動,如果與很多控制項互動,難道要在button裡new 出所有控制項例項不成?如果所有控制項的互動都相互依賴的話,那將是很恐怖的!

我們來看一下標準的中介者模式的結構圖:

廣義中介者:實際上標準的中介者結構在實際開發中並不實用或理想。而中介者模式實現的是封裝物件間的互動,不必拘泥於標準的中介者模式結構,標準結構限制很多,導致能完全按照標準使用的中介者模式的地方不是很多。

比如:1.collage父類沒必要,實際開發中很多互動的物件本身沒有公共父類。 2.同事類必須持有中介者物件嗎?+mediator:mediator,由於中介者是用來封裝同事物件間的互動的,其本身一般是沒有狀態需要維護的,所以可以將中介者motherboard實現成單例。 3.中介者必須完全作為屬性這樣持有所有的同事類嗎?而且有的方法可能需要的同事類例項的狀態並不是當初通過屬性獲取的,所以其實可以根據具體情況,通過方法傳遞,或在方法裡new乙個等。 4.如果不需要擴充套件中介者,那麼中介者介面mediator是不需要的。

public

class

cddriver

}public

class

motherboard

//將cd資料傳給cpu

public

void cddatatocpu(string

data)

//public

void videodatatovideocard(string

data)

//將聲音資料傳給音效卡

public

void sounddatatosoundcard(string

data)

}publiic

class

cpu}

public

class

videocard

}public

class

soundcard

}

中介者模式的本質:封裝互動

中介者模式

1.中間 類 namespace intermediarypattern 成員物件需要知道是哪個中介者在通知它事情 public abstract class member 各成員間要傳送訊息 public abstract void send string msg 這個方法其實是具體實施發訊息的 ...

中介者模式

中介者模式就是在物件之間的關係很複雜時用,名如其人,就像租房的黑中介一樣,如果每個房東都拿著很多租房者的資訊很麻煩,每個租房者都要拿著很多房東的資訊也麻煩,所以需要乙個中介來拿著這些資訊,租房者只需要發出租房的請求,中介會給你介紹合適的房東,房東只需要提交房屋資料就等著中介的人帶著訪客看房拿錢就行了...

中介者模式

中介者模式 mediator pattern 1 抽象中介者 mediator 角色 抽象中介者角色定義統一的介面用於各同事角色之間的通訊。具體中介者 concrete mediator 角色 具體中介者角色通過協調各同事角色實現協作行為,因此它必須依賴於各個同事角色。同事 colleague 角色...