1.定義
中介者模式將同類物件之間的互動封裝起來,使得同類物件之間不需要互相作用,而是把這種呼叫的行為放在中介物件中去進行;好處是降低了物件之間的耦合,是一種行為類模式;為什麼要使用中介者模式?一般來說,同事類之間的關係是複雜的,多個同事類之間相互關聯,會呈現出一種網路結果,這種過度耦合的網路結構,不利於系統的復用。
下面舉個例子來說明下
2.例子
現在有個簡單的場景:兩個人之間可以互相聊天,那麼簡單點,程式可以這麼來寫:
public class people
public void setname(string name)
public void connect(people people)
public void talk(string msg)
public people(string name)
public static void main(string args)
}
每個people物件持有要聊天物件的乙個引用;connect方法將建立起連線;執行結果如下
張三對李四說:尼好,很高興認識你
李四對張三說:我也是哦
這裡只是2個人之間,如果是很多個人之間聊天,那麼就涉及到每個人都會持有其他人的引用,任何乙個人的加入或者離開都要修改其他的人的持有使用者的關係,所以可以考慮把這部分邏輯抽取出來,放在乙個中介類裡面chatroom,抽象出乙個聊天室的中介類,任何使用者的聊天行為都通過chatroom這個類來處理;具體**如下
public class user
public void setname(string name)
public chatroom getchatroom()
public void setchatroom(chatroom chatroom)
public void login()
public void logout()
public void sendmsg(string msg)
public void listen(user user, string msg)
}
user物件,user有登入和登出功能,登入的時候會呼叫聊天室的adduser新增使用者,登出的時候呼叫聊天室的刪除使用者方法;使用者還可以傳送訊息,然後還可以接受其他使用者的訊息;之後是聊天室chatroom類
public class chatroom
public void removeuser(user user)
public void talk(user user, string msg)
}
聊天室持有所有使用者的乙個列表,然後有新增和移除使用者的功能,talk方法,用來向其他使用者傳送資訊;測試**如下所示
public static void main(string args)
執行結果如圖所示
總結:當物件之間互相引用多的時候,考慮使用中介模式,降低物件之間的耦合;微服務中的註冊中心其實也是使用中介模式,把服務的註冊和定址都放在註冊中心上進行,而各個服務之間不需要關注其他服務的細節;
設計模式 中介者模式
假如沒有總經理,下面三個部門 財務部,市場部,研發部。財務部要發工資,讓大家核對公司需要跟市場部和研發部都通氣 市場部要接新專案,需要研發部處理技術 需要財務部出資金。市場部跟各個部門打交道。雖然只有三個部門,但是關係非常亂。實際上,公司都有總經理。各個部門有什麼事情都通報到總經理這裡,總經理再通知...
設計模式 中介者模式
在我們的日常生活中經常需要購買各種各樣的東西,房子 車子 生活用品等等。那麼我們並不會對各個產品都了解,所以銷售人員應運而生,他們了解產品,然後他們根據你的需求在向你們推薦符合你們要求的產品。這些銷售人員就相當於中介,處於客戶和產品之間,為你們搭橋牽線。這就是這篇需要講述的乙個設計模式 中介者模式。...
設計模式 中介者模式
在學習這個模式之前,我們先來回顧一下乙個物件導向的設計原則 迪公尺特原則,這個原則告訴我們 乙個物件盡可能少跟其他物件進行關聯,就像乙個人要少跟陌生人說話一樣。而中介者模式,也正是為了協調多個物件之間複雜的引用關係。我們來看乙個例子,雖然這個例子不太好,後期想個好一點的例子再改。在中介者模式中,主要...