中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式Demo:
/**
* 2018年4月8日下午11:30:55
*/
package com.Designpattern;
/**
* @author xinwenfeng
*
*/
public class TestMediator {
/**
* @param args
*/
public static void main(String[] args) {
HouseMediator houseMediator = new HouseMediator();
BuyHousePeople buy_people = new BuyHousePeople(houseMediator);//设置中介者
SellHousePeople sell_people = new SellHousePeople(houseMediator);
houseMediator.setBuy(buy_people);
houseMediator.setSell(sell_people);
buy_people.send("我要买那套房");
sell_people.send("ok");
}
}
//抽象中介者
interface MyMediator{
public void sendMessage(String message,String from);
}
//抽象消息收发者
abstract class MyPeople{
protected MyMediator mediator;//只知道中介者
public MyPeople(MyMediator mediator) {
this.mediator = mediator;
}
}
class BuyHousePeople extends MyPeople{
public BuyHousePeople(MyMediator mediator) {
super(mediator);
}
public void send(String message) {
System.out.println("买人的人说:"+message);
mediator.sendMessage(message,"BUY");
}
public void receive(String message) {
System.out.println("买人的人收到消息:"+message);
}
}
class SellHousePeople extends MyPeople{
public SellHousePeople(MyMediator mediator) {
super(mediator);
}
public void send(String message) {
System.out.println("出售的人说:"+message);
mediator.sendMessage(message,"SELL");
}
public void receive(String message) {
System.out.println("出售的人收到消息:"+message);
}
}
class HouseMediator implements MyMediator{
private BuyHousePeople buy;//持有每个对象
private SellHousePeople sell;
public void setBuy(BuyHousePeople buy) {
this.buy = buy;
}
public void setSell(SellHousePeople sell) {
this.sell = sell;
}
@Override
public void sendMessage(String message,String from) {//中转消息
switch(from) {
case "BUY":
if(null != sell) {
sell.receive(message);
}
break;
case "SELL":
if(null != buy) {
buy.receive(message);
}
break;
}
}
}
结果: