一、前言
中介者模式的概念就像我們生活中的中介一樣,它的職責就是處理不同類與對象之間的通信,降低了 它們通信的複雜度,這種設計模式支持鬆耦合,且代碼易於維護。
二、中介者模式
概述:用一箇中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。
中介者模式主要解決對象與對象之間存在大量的關聯關係,這樣勢必會導致系統的結構變得很複雜,同時若一個對象發生改變,我們也需要跟蹤與之相關聯的對象,同時做出相應的處理。
使用場景:
1.一組對象以定義良好但是複雜的方式進行通信。產生的相互依賴關係結構混亂且難以理解。
2.一個對象引用其他很多對象並且直接與這些對象通信,導致難以複用該對象。
3.想定製一個分佈在多個類中的行爲,而又不想生成太多的子類。
優點:
1、降低了類的複雜度,將一對多轉化成了一對一。 2、各個類之間的解耦。 3、符合迪米特原則。
缺點:中介者會龐大,變得複雜難以維護。
三、代碼展示
3.1 定義一箇中介者的接口,用來與其它對象進行通信
public abstract class Mediator {
public abstract void notice(String content);
}
3.2 實現類
public class ConcreteMediator extends Mediator {
private ColleagueA ca;
private ColleagueB cb;
public ConcreteMediator() {
ca = new ColleagueA();
cb = new ColleagueB();
}
public void notice(String content) {
if (content.equals("boss")) {
//老闆來了, 通知員工A
ca.action();
}
if (content.equals("client")) {
//客戶來了, 通知前臺B
cb.action();
}
}
}
3.3 通信的類
public class ColleagueA extends Colleague {
public void action() {
System.out.println("普通員工努力工作");
}
}
public class ColleagueB extends Colleague {
public void action() {
System.out.println("前臺注意了!");
}
}
3.4 結果
public class Test {
public static void main(String[] args) {
Mediator med = new ConcreteMediator();
//老闆來了
med.notice("boss");
//客戶來了
med.notice("client");
}
}
普通員工努力工作
前臺注意了!