摘自《Java設計模式(瘋狂JAVA聯盟版)》
概述
用一箇中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。
適用性
1.一組對象以定義良好但是複雜的方式進行通信。產生的相互依賴關係結構混亂且難以理解。
2.一個對象引用其他很多對象並且直接與這些對象通信,導致難以複用該對象。
3.想定製一個分佈在多個類中的行爲,而又不想生成太多的子類。
參與者
1.Mediator
中介者定義一個接口用於與各同事(Colleague)對象通信。
2.ConcreteMediator
具體中介者通過協調各同事對象實現協作行爲。
瞭解並維護它的各個同事。
3.Colleagueclass
每一個同事類都知道它的中介者對象。
每一個同事對象在需與其他的同事通信的時候,與它的中介者通信
類圖
例子
public abstract class Mediator {
public abstract void notice(String content);
}
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();
}
}
}
public class ColleagueA extends Colleague {
public void action() {
System.out.println("普通員工努力工作");
}
}
public class ColleagueB extends Colleague {
public void action() {
System.out.println("前臺注意了!");
}
}
public class Test {
public static void main(String[] args) {
Mediator med = new ConcreteMediator();
//老闆來了
med.notice("boss");
//客戶來了
med.notice("client");
}
}
普通員工努力工作
前臺注意了!