一.定義
用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互,中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互,屬于行為性模式
二.作用
- 降低類于類之間的耦合
- 易于維護(hù)
三.案例
中介者模式比較簡(jiǎn)單,在實(shí)際項(xiàng)目開發(fā)中經(jīng)常會(huì)被用到,先來一個(gè)簡(jiǎn)單的例子,ConcreteColleague代表具體同事類,具備具體的行為,并和中介者關(guān)聯(lián)。
//具體的同事類
public class ConcreteColleague {
private String name;
private ConcreteMediator mediator;
//通過構(gòu)造函數(shù)和中介者關(guān)聯(lián)
public ConcreteColleague(String name, ConcreteMediator mediator) {
this.name = name;
this.mediator = mediator;
}
public void doSomething() {
mediator.doSomething();
}
//行為
public void say(){
System.out.println("我叫"+name);
}
}
在定義一個(gè)ConcreteMediator中介者,幫助同事類處理各種行為
//中介者
public class ConcreteMediator {
private ConcreteColleague colleague;
public void setColleague(ConcreteColleague colleague) {
this.colleague = colleague;
}
public void doSomething(){
colleague.say();
}
}
實(shí)際應(yīng)用如下:
public static void main(String[] args) {
//定義中介者
ConcreteMediator mediator = new ConcreteMediator();
//定義同事類
ConcreteColleague colleague = new ConcreteColleague("小許",mediator);
//中介者關(guān)系他的同事類
mediator.setColleague(colleague);
//幫助同事類處理行為
mediator.doSomething();
}
看看執(zhí)行結(jié)果:
我叫小許
四.總結(jié)
- 使用場(chǎng)景
當(dāng)一個(gè)類和多個(gè)類有耦合關(guān)系的時(shí)候,為防止修改一個(gè)類,倒置多個(gè)類產(chǎn)生影響。可使用中介者模式 - 優(yōu)點(diǎn)
中介者就是來減少類間的依賴關(guān)系,轉(zhuǎn)多對(duì)多,為一對(duì)一 - 缺點(diǎn)
中介者就像一個(gè)水缸,當(dāng)一個(gè)裝不下的時(shí)候,就要多個(gè),太多了就會(huì)泛濫。同事類越多,中介者也就越復(fù)雜,所以不要濫用,要適度。