設計模式 中介者模式

2021-08-07 20:18:42 字數 2353 閱讀 7989

在我們的日常生活中經常需要購買各種各樣的東西,房子、車子、生活用品等等。那麼我們並不會對各個產品都了解,所以銷售人員應運而生,他們了解產品,然後他們根據你的需求在向你們推薦符合你們要求的產品。這些銷售人員就相當於中介,處於客戶和產品之間,為你們搭橋牽線。這就是這篇需要講述的乙個設計模式-中介者模式。

從程式方面來講,中介者模式就是各個物件封裝,使他們不需要相互直接引用,而是通過中介者來通訊。對於乙個模組,可能由很多物件構成,而且這些物件之間可能存在相互的引用,為了減少物件兩兩之間複雜的引用關係,使之成為乙個松耦合的系統,我們需要使用中介者模式,這就是中介者模式的模式動機。

如下圖(來自大話設計模式)

聯合國就相當於中介者模式中的中介者

中介抽象類

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 ...