定義
定義一個封裝一組對象如何交互的對象
通過使對象明確地相互引用來促進鬆散耦合,並允許獨立地改變它們的交互。
類型
行爲型
適用場景
①、系統中對象之間存在複雜的引用關係,產生的相互依賴關係結構混亂且難以理解。
②、交互的公共行爲,如果需要改變行爲則可以增加新的中介者類。
優缺點
優點:
①、將一對多轉化成了一對一,降低程序複雜度。
②、類之間解耦。
缺點:
①、中介者過多,導致系統複雜。
代碼實現
案例:由於今年這個疫情,很多互聯網公司選擇網上辦公,我司也是這樣。部門經理在微信上建立了部門羣,給每個開發者分配了開發任務,或者做一些休假通知。
首先編寫一個用戶類
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void sendMessage(String message) {
CompanyGroup.showMessage(this, message);
}
}
這裏就提供了一個name屬性,定義了一個發送消息的方法,由CompanyGroup這個類的showMessage()方法作爲中介者來發送。
定義羣聊天室
public class CompanyGroup {
public static void showMessage(User user, String message) {
System.out.println(new Date().toString() + " [" + user.getName() + "]: " + message);
}
}
這個就是一箇中介者的類,所有用戶發的消息,都經過這個類的showMessage()方法。後期也可以增加敏感詞校驗的邏輯和其他邏輯。
編寫測試類
public class MainTest {
public static void main(String[] args) {
User manager = new User("部門經理");
User staff = new User("程序員");
manager.sendMessage("你今天的任務就是 完成 設計模式的學習");
staff.sendMessage("好的,老大,收到!");
}
}
輸出結果:
C:\android\java\jdk1.8\bin\java.exe
Mon Mar 09 13:09:20 CST 2020 [部門經理]: 你今天的任務就是 完成 設計模式的學習
Mon Mar 09 13:09:20 CST 2020 [程序員]: 好的,老大,收到!
相關源碼
1. Jdk中的Timer計時器