定義
中介者模式(Mediator Pattern)定義:用一個中介對象來封裝一系列的對象交互娄帖,中介者使各對象不需要顯式地相互引用,從而使其耦合松散停蕉,而且可以獨立地改變它們之間的交互。中介者模式又稱為調(diào)停者模式囤采,它是一種對象行為型模式。
UML圖描述
中介者模式主要包含四種角色:
- 抽象中介類角色:如下圖的Mediator
- 具體中介類角色:如下圖的ConcreteMediator
- 抽象同事類角色:如下圖的Colleague
4.具體同事類角色:如下圖的ConcreteColleague1,ConcreteColleague2
中介者模式
代碼實現(xiàn)
/**
* 抽象中介類
*/
public abstract class Mediator {
protected List<Colleague> colleagues;
public Mediator(){
colleagues = new ArrayList<>();
}
public void register(Colleague colleague){
colleagues.add(colleague);
colleague.setMediator(this);
}
public abstract void behavior(Colleague colleague,String msg);
}
/**
* 具體中介類
*/
public class ConcreteMediator extends Mediator{
@Override
public void behavior(Colleague colleague, String msg) {
if(colleagues.contains(colleague)){
colleague.receiveMsg(msg);
}else{
System.out.println("該對象不在中介類可聯(lián)系的范圍");
}
}
}
/**
* 抽象同事類
*/
public abstract class Colleague {
protected Mediator mediator;
public void receiveMsg(String str){
System.out.println(str);
}
public abstract void sendMsg(Colleague colleague,String str);
public void setMediator(Mediator mediator) {
this.mediator = mediator;
}
}
/**
* 具體同事類1
*/
public class ConcreteColleague1 extends Colleague {
@Override
public void sendMsg(Colleague colleague, String str) {
this.mediator.behavior(colleague,str);
}
}
/**
* 具體同事類2
*/
public class ConcreteColleague2 extends Colleague {
@Override
public void sendMsg(Colleague colleague, String str) {
this.mediator.behavior(colleague,str);
}
}
/**
* 測試類
*/
public class Test {
public static void main(String[] args) {
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new ConcreteColleague1();
Colleague colleague2 = new ConcreteColleague2();
mediator.register(colleague1);
mediator.register(colleague2);
colleague1.sendMsg(colleague2,"你好惩淳,這是colleague1發(fā)來的打招呼信息");
colleague1.sendMsg(colleague1,"你好蕉毯,這是colleague2發(fā)來的打招呼信息");
}
}
適用場景
1.系統(tǒng)中對象之間存在復(fù)雜的引用關(guān)系,產(chǎn)生的相互依賴關(guān)系結(jié)構(gòu)混亂且難以理解思犁。
一個對象由于引用了其他很多對象并且直接和這些對象通信代虾,導(dǎo)致難以復(fù)用該對象。
2.想通過一個中間類來封裝多個類中的行為激蹲,而又不想生成太多的子類棉磨。可以通過引入中介者類來實現(xiàn)学辱,在中介者中定義對象乘瓤。
3.交互的公共行為,如果需要改變行為則可以增加新的中介者類策泣。
中介者模式的優(yōu)點
1.簡化了對象之間的交互馅扣。
2.將各同事解耦。
3.減少子類生成着降。
4.可以簡化各同事類的設(shè)計和實現(xiàn)。
中介者模式的缺點
1.在具體中介者類中包含了同事之間的交互細節(jié)拗军,可能會導(dǎo)致具體中介者類非常復(fù)雜任洞,使得系統(tǒng)難以維護。