1. 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。简单来说,中介者模式就是将多个对象之间复杂的紧耦合调用关系改造为这些对象与中介者之间的调用关系,从而实现松耦合。
2. 中介者模式通用类图及实现:
/**
* @author beck.yang
* @date 2022/7/5 17:37
* @description 中介者抽象类
*/
public abstract class Mediator {
public abstract void send(String message, MediatorObject mediatorObject);
}
/**
* @author beck.yang
* @date 2022/7/5 17:38
* @description 具体中介者
*/
public class ConcreteMediator extends Mediator{
private ConcreteObject1 concreteObject1;
private ConcreteObject2 concreteObject2;
public void setConcreteObject1(ConcreteObject1 concreteObject1) {
this.concreteObject1 = concreteObject1;
}
public void setConcreteObject2(ConcreteObject2 concreteObject2) {
this.concreteObject2 = concreteObject2;
}
@Override
public void send(String message, MediatorObject mediatorObject) {
if (mediatorObject.equals(this.concreteObject1)) {
this.concreteObject2.notify(message);
}else{
this.concreteObject1.notify(message);
}
}
}
/**
* @author beck.yang
* @date 2022/7/5 17:38
* @description 对象
*/
public abstract class MediatorObject {
protected Mediator mediator;
public MediatorObject(Mediator mediator) {
this.mediator = mediator;
}
public abstract void send(String message);
}
/**
* @author beck.yang
* @date 2022/7/5 17:39
* @description 具体对象1
*/
public class ConcreteObject1 extends MediatorObject{
public ConcreteObject1(Mediator mediator) {
super(mediator);
}
@Override
public void send(String message) {
super.mediator.send(message, this);
}
public void notify(String message){
System.out.println("ConcreteObject1 receive message: "+message);
}
}
/**
* @author beck.yang
* @date 2022/7/5 17:39
* @description 具体对象2
*/
public class ConcreteObject2 extends MediatorObject{
public ConcreteObject2(Mediator mediator) {
super(mediator);
}
@Override
public void send(String message) {
super.mediator.send(message, this);
}
public void notify(String message){
System.out.println("ConcreteObject2 receive message: "+message);
}
}
/**
* @author beck.yang
* @date 2022/7/5 17:13
* @description 中介者模式
*/
public class Main {
public static void main(String[] args) {
ConcreteMediator mediator = new ConcreteMediator();
ConcreteObject1 concreteObject1 = new ConcreteObject1(mediator);
ConcreteObject2 concreteObject2 = new ConcreteObject2(mediator);
mediator.setConcreteObject1(concreteObject1);
mediator.setConcreteObject2(concreteObject2);
concreteObject1.send("hello");
concreteObject2.send("哈喽");
}
}