中介模式
中介模式屬于行為模式坯沪。
理解起來很簡單,例如公司新接了好幾個項目,那如何告訴公司的各位同學要負責項目是哪一個呢呢,不可能一個人一個人的互相轉(zhuǎn)達
這個時候為了統(tǒng)一通知,就采用公司的企業(yè)郵箱統(tǒng)一發(fā)送放假消息到各個同學的個人企業(yè)郵箱來進行通知
這時公司的企業(yè)郵箱就充當了一個中介者的角色.
對比兩種情況:
- 沒有中介者的情況
-
通過公司郵箱終結(jié)者
應用場景
- 多個對象之間存在相互通信關(guān)系
- 多個對象彼此依賴,后續(xù)希望對象彼此之間不再彼此依賴,不再彼此知道,只通過中間件進行
代碼示例
(一)抽象的中介者通知
public interface Mediator {
void doSomeThings();
}
(二)抽象的公司同學負責做什么
public abstract class Student {
public Mediator mediator;
public Student(Mediator mediator) {
this.mediator = mediator;
}
public abstract void doSomeThings();
}
(三)具體的同學具體做的事
同學A:
public class StudentA extends Student {
public StudentA(Mediator mediator) {
super(mediator);
}
@Override
public void doSomeThings() {
System.out.print("\n" + "通知:StudenA負責A項目");
}
}
同學B:
public class StudentB extends Student {
public StudentB(Mediator mediator) {
super(mediator);
}
@Override
public void doSomeThings() {
System.out.print("\n" + "通知:StudetB負責B項目");
}
}
(四)具體的中介通知
public class ConcreteMediator implements Mediator {
private StudentA studentA;
private StudentB studentB;
public void setStudentA(StudentA studentA) {
this.studentA = studentA;
}
public void setStudentB(StudentB studentB) {
this.studentB = studentB;
}
@Override
public void doSomeThings() {
studentA.doSomeThings();
studentB.doSomeThings();
}
}
調(diào)用方式
ConcreteMediator concreteMediator = new ConcreteMediator();
concreteMediator.setStudentA(new StudentA(concreteMediator));
concreteMediator.setStudentB(new StudentB(concreteMediator));
concreteMediator.doSomeThings();
顯示結(jié)果
通知:StudenA負責A項目
通知:StudetB負責B項目
總結(jié)
- 優(yōu)點
- 實現(xiàn)中介一對多的關(guān)系,讓各個對接點職責清晰
- 靈活容易維護擴展,需要添加關(guān)系只需要和中介者通信即可
- 缺點
- 如果一個中介者要處理很多關(guān)系,類會變得龐大難以維護(其實也可以通過在構(gòu)建另外一個中介者來維護,算不上多大的缺點)