用一个中介者对象来封装一系列的对象交互。中介者使得各对象不需要显式地相互引用,从而使其松散耦合,而且可以独立地改变它们之间的交互。
看到这个定义,你想到了什么?MVP架构?Presenter持有View和Model是的他们可以交互,但View和Model并未互相持有,从而达到了解耦.
栗子
/**
* 中介者
*/
public interface Mediator {
void notice(Person person, String msg);//通知方法
}
/**
* 房屋中介
*/
public class HouseMediator implements Mediator {
Buyer buyer;
Landlord landlord;
public Buyer getBuyer() {
return buyer;
}
public void setBuyer(Buyer buyer) {
this.buyer = buyer;
}
public Landlord getLandlord() {
return landlord;
}
public void setLandlord(Landlord landlord) {
this.landlord = landlord;
}
@Override
public void notice(Person person, String msg) {
System.out.println("中介收到信息,并转发给相应的目标人群");
if (person == buyer){
landlord.receive(msg);
}else if (person == landlord){
buyer.receive(msg);
}
}
}
/**
* 中介者的客户(买房人和房东的抽象父类)
*/
public abstract class Person {
protected Mediator mediator;
public Person(Mediator mediator) {
this.mediator = mediator;
}
public abstract void send(String message);//发布信息
public abstract void receive(String message);//接收信息
}
/**
* 买房人
*/
public class Buyer extends Person {
public Buyer(Mediator mediator) {
super(mediator);
}
@Override
public void send(String message) {
System.out.println("买房者发布信息:"+message);
mediator.notice(this,message);
}
@Override
public void receive(String message) {
System.out.println("买房者收到信息:"+message);
}
}
/**
* 房东
*/
public class Landlord extends Person {
public Landlord(Mediator mediator) {
super(mediator);
}
@Override
public void send(String message) {
System.out.println("房东发布信息:"+message);
mediator.notice(this,message);
}
@Override
public void receive(String message) {
System.out.println("房东收到信息:"+message);
}
}
/**
* 测试类
*/
public class Test {
public static void main(String[] args) {
HouseMediator houseMediator = new HouseMediator();
Buyer buyer = new Buyer(houseMediator);
Landlord landlord = new Landlord(houseMediator);
houseMediator.setBuyer(buyer);
houseMediator.setLandlord(landlord);
buyer.send("求购汤臣一品");
System.out.println("------------------------");
landlord.send("我有豪宅一套");
}
}
结果
image.png