定义:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
代码:
package mediator_model;
/**
* @author naivor
* 中介模式-场景类
*/
public class MediatorModel {
public static void main(String[] args) {
ConcreteMediator mediator=new ConcreteMediator();
Colleage colleage1=new Colleage1(mediator); //同事认识中介
Colleage colleage2=new Colleage2(mediator);
mediator.setColleage1(colleage1); //中介认识各个同事
mediator.setColleage2(colleage2);
colleage1.send("message1"); //发消息
colleage2.send("message2");
}
}
/**
*
* @author naivor
* 中介模式-中介者抽象类
*/
abstract class Mediator{
public abstract void sendMessage(String message,Colleage colleage);
}
/**
*
* @author naivor
* 中介模式-同事抽象类
*/
abstract class Colleage{
protected Mediator mediator;
public Colleage(Mediator mediator) {
this.mediator=mediator;
}
public void send(String message){
mediator.sendMessage(message, this);
}
public abstract void receive(String message);
}
/**
*
* @author naivor
* 中介模式-具体中介者类
*/
class ConcreteMediator extends Mediator{
private Colleage colleage1;
private Colleage colleage2;
public Colleage getColleage1() {
return colleage1;
}
public void setColleage1(Colleage colleage1) {
this.colleage1 = colleage1;
}
public Colleage getColleage2() {
return colleage2;
}
public void setColleage2(Colleage colleage2) {
this.colleage2 = colleage2;
}
@Override
public void sendMessage(String message, Colleage colleage) {
if (colleage==colleage1) {
colleage2.receive(message);
}else {
colleage1.receive(message);
}
}
}
/**
*
* @author naivor
* 中介模式-同事1类
*/
class Colleage1 extends Colleage{
public Colleage1(Mediator mediator) {
super(mediator);
}
public void receive(String message){
//Colleage1接收消息的业务逻辑
}
}
/**
*
* @author naivor
* 中介模式-同事2类
*/
class Colleage2 extends Colleage{
public Colleage2(Mediator mediator) {
super(mediator);
}
@Override
public void receive(String message) {
//Colleage2接收消息的业务逻辑
}
}
与代理模式的区别:
代理模式:三者之间的两者通信,代理者全权处理请求
中介模式:多者之间的两者通信,中介者传递请求给两者中的另一方