描述
中介者模式(Mediator Pattern)是一种行为设计模式,它通过封装一系列对象之间的交互,使得这些对象不需要显式地相互引用,从而降低了它们之间的耦合度。
在中介者模式中,中介者对象负责协调一组相关对象的交互。每个对象都只需要与中介者对象通信,而不需要知道其他对象的存在。这种模式可以减少对象之间的依赖关系,使系统更易于维护和扩展。
实现
中介抽象类
public interface Mediator {
void sendMsg(String msg,Colleage colleage);
}
中介实现类
public class MediatorImpl implements Mediator{
private Colleage colleageA;
private Colleage colleageB;
@Override
public void sendMsg(String msg, Colleage colleage) {
colleage.recieveMsg(msg);
}
public void setColleageA(Colleage colleageA) {
this.colleageA = colleageA;
}
public void setColleageB(Colleage colleageB) {
this.colleageB = colleageB;
}
}
同事抽象类
public abstract class Colleage {
protected Mediator mediator;
public Colleage(Mediator mediator){
this.mediator = mediator;
}
void sendMsg(String msg,Colleage colleage){
mediator.sendMsg(msg,colleage);
}
abstract void recieveMsg(String msg);
}
同事A和同事B
public class ColleageA extends Colleage{
public ColleageA(Mediator mediator) {
super(mediator);
}
@Override
void recieveMsg(String msg) {
System.out.println("ColleageA receieve "+ msg);
}
}
public class ColleageB extends Colleage{
public ColleageB(Mediator mediator) {
super(mediator);
}
@Override
void recieveMsg(String msg) {
System.out.println("ColleageB receieve "+ msg);
}
}
客户端
public class Client {
public static void main(String[] args) {
MediatorImpl mediator = new MediatorImpl();
ColleageA colleageA = new ColleageA(mediator);
ColleageB colleageB = new ColleageB(mediator);
mediator.setColleageA(colleageA);
mediator.setColleageB(colleageB);
colleageA.sendMsg("你好,B同事,我是A同事",colleageB);
}
}
实验结果
使用场景
- 多个对象之间的交互复杂,彼此之间的依赖关系难以维护。
- 系统中的对象关系图非常复杂,难以理解和维护。
- 想要为对象之间的交互行为提供一个可扩展的框架。
- 想要通过中介者来减少对象之间的耦合,使系统更加灵活和可维护。
- 系统中的一些对象需要协调工作,但是彼此之间并不直接交互。
- 在一个分布式系统中,中介者可以作为消息传递的中心,协调各个节点之间的通信。