在我們的日常生活中經常需要購買各種各樣的東西,房子、車子、生活用品等等。那麼我們並不會對各個產品都了解,所以銷售人員應運而生,他們了解產品,然後他們根據你的需求在向你們推薦符合你們要求的產品。這些銷售人員就相當於中介,處於客戶和產品之間,為你們搭橋牽線。這就是這篇需要講述的乙個設計模式-中介者模式。
從程式方面來講,中介者模式就是各個物件封裝,使他們不需要相互直接引用,而是通過中介者來通訊。對於乙個模組,可能由很多物件構成,而且這些物件之間可能存在相互的引用,為了減少物件兩兩之間複雜的引用關係,使之成為乙個松耦合的系統,我們需要使用中介者模式,這就是中介者模式的模式動機。
如下圖(來自大話設計模式)
聯合國就相當於中介者模式中的中介者
中介抽象類
public
abstract
class mediator
抽象同事類
public
abstract
class colleague
public
abstract
void
getmsg(string msg);
public
abstract
void
sendmsg(string msg);
}
房東類(具體同事類)
public
class
landlord
extends
colleague
@override
public
void
getmsg(string msg)
@override
public
void
sendmsg(string msg)
}
租客類(具體同事類)
public
class
renter
extends
colleague
@override
public
void
getmsg(string msg)
@override
public
void
sendmsg(string msg)
}
房地產經紀人中介類
public
class
realtor
extends
mediator
public
void
setrenter(renter renter)
@override
public
void
handlemsg(string msg, colleague colleague)
//如果訊息是租客發過來的,說明租客已經決定是否租賃房屋,把訊息給房東(現實中沒這必要。。。)
if (colleague.equals(renter)) }}
測試類
public
class client
}
**見github位址
如果在乙個系統中物件之間的聯絡呈現為網狀結構,也就是存在大量的多對多聯絡時就可以用中介者模式。通過使用中介者模式可以把原來的網狀結構變成星形結構,最上面那兩張圖,聯合國來作為中介,處理各國的事務。
中介者模式可以使物件之間的關係數量急劇減少,而且還承擔這兩方面的作用,一是中轉作用,而是協調作用。通過中介者提供的中轉作用,各個同事物件就不再需要顯式引用其他同事,當需要和其他同事進行通訊時,通過中介者即可。中介者可以更進一步的對同事之間的關係進行封裝,同事可以一致地和中介者進行互動,而不需要指明中介者需要具體怎麼做,中介者根據封裝在自身內部的協調邏輯,對同事的請求進行進一步處理,將同事成員之間的關係行為進行分離和封裝。
通過使用中介者模式可以降低了類的複雜度,將一對多轉化成了一對一,降低系統的耦合性。
設計模式 中介者模式
假如沒有總經理,下面三個部門 財務部,市場部,研發部。財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣 市場部要接新專案,需要研發部處理技術 需要財務部出資金。市場部跟各個部門打交道。雖然只有三個部門,但是關係非常亂。實際上,公司都有總經理。各個部門有什麼事情都通報到總經理這裡,總經理再通知...
設計模式 中介者模式
在學習這個模式之前,我們先來回顧一下乙個物件導向的設計原則 迪公尺特原則,這個原則告訴我們 乙個物件盡可能少跟其他物件進行關聯,就像乙個人要少跟陌生人說話一樣。而中介者模式,也正是為了協調多個物件之間複雜的引用關係。我們來看乙個例子,雖然這個例子不太好,後期想個好一點的例子再改。在中介者模式中,主要...
設計模式 中介者模式
問題 當專案有多個系統或者管理類,他們之間需要互相呼叫的時候,怎麼辦。如果直接在這些系統或者管理類之間互相注入對方的引用,這雖然可以暫時解決問題,但後期會造成 的依賴程度變高,耦合難解,而且單個類知道的引用內容過多,不符合最少只是原則,推薦使用中介者模式解耦和。抽象類如下 中介者介面 public ...