一、定義
封裝了一組對象如何交互的對象
補充定義:通過使對象明確地相互引用來促進松散耦合,并允許獨立地改變它們的交互
類型:行為型
?
二、適用場景
1、系統(tǒng)中對象之間存在復雜的引用關系,產(chǎn)生的相互依賴關系結構混亂且難以理解
2、交互的公共行為,如果需要改變行為則可以增加新的中介者類。
(聊天室:其中一個人說一句話,會通知聊天室里的所有人。如果沒有中介者,則要對所有人說一遍)
?
三、中介者模式-優(yōu)點
1、將一對對轉化為一對一,降低程序復雜度
2、類之間解耦(在聊天室說話,假設有10個人,其中一個人要對剩余的9個人說,這樣他們是耦合在一起的。如果只對聊天室說,這樣就解耦了)
?
四、中介者模式-缺點
1、中介者過多,導致系統(tǒng)復雜
?
五、中介者模式-相關設計模式
1、中介者模式和觀察者模式
使用觀察者模式,實現(xiàn)中介者模式中的角色間通訊。
?
六、Coding
場景:學習的時候,有一個學習群(如QQ群),大家交流都通過這個群來實現(xiàn)
1、用戶類
public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public User(String name) { this.name = name; } public void sendMesssage(String message){ StudyGroup.showMessage(this, message); }}
2、學習群類
public class StudyGroup { public static void showMessage(User user, String message){ System.out.println(new Date().toString() " [" user.getName() "] : " message); }}
3、測試
public class Test { public static void main(String[] args) { User larry = new User("larry"); User nick = new User("nick"); larry.sendMesssage("Hello world"); nick.sendMesssage("Yes"); }}
結果
?
4、UML圖
?
?
七、源碼中的使用
1、JDK中的Java.util 下的計時器類Timer
里面有很多schedule方法,最后調用sched方法
Timer就相當一個中介者,TimerTask相當于一個用戶。
?
來源:http://www.icode9.com/content-4-128101.html