![]()
/**
* 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介模式后,普通对象之间的交流就通过中介来进行,避免了相互进行依赖
* 模式特点:一个中介接口和其实现类,该实现类拥有所有的普通对象的引用
* 每个普通对象都引用一个中介对象
*
*/
//中介接口
public interface IAgent {
//登记用户
void register(Pseron pseron);
/**
* 传递消息
* @param message 消息内容
* @param from 消息来源的用户名,如房东还是租户
*/
void forward(String message,String from);
}
//房屋中介
public class HouseAgent implements IAgent {
private List<Pseron> list=new ArrayList<>(); //所有的用户
@Override
public void register(Pseron pseron) {
if(!list.contains(pseron)){
list.add(pseron);
pseron.linkAgent(this);
}
}
@Override
public void forward(String message,String fromName) {
for (Pseron pseron : list) {
if(!pseron.name.equals(fromName)){ //传递消息给其他人
pseron.receive(message);
}
}
}
}
//用户,拥有发送消息和接收消息,以及绑定中介的方法
public abstract class Pseron {
protected String name;
abstract void send(String message);
abstract void receive(String message);
abstract void linkAgent(IAgent agent);
}
//房东
public class HouseOwer extends Pseron {
private IAgent agent;
public HouseOwer(String name) {
this.name = name;
}
@Override
void send(String message) {
agent.forward(message,this.name);
}
@Override
void receive(String message) {
System.out.println(message);
System.out.println("我是房东:我有房出租");
}
//绑定中介对象
@Override
void linkAgent(IAgent agent) {
this.agent=agent;
}
}
//租客
public class Renter extends Pseron {
private IAgent agent;
public Renter(String name) {
this.name = name;
}
@Override
void send(String message) {
agent.forward(message,this.name);
}
@Override
void receive(String message) {
System.out.println(message);
System.out.println("我是房客,我要租房");
}
//绑定中介对象
@Override
void linkAgent(IAgent agent) {
this.agent=agent;
}
}
public class Test {
public static void main(String[] args) {
HouseOwer houseOwer = new HouseOwer("房东");//房东
Renter renter = new Renter("租客");//租客
HouseAgent houseAgent = new HouseAgent();
houseAgent.register(houseOwer);
houseAgent.register(renter);
renter.send("我是房客:请问谁有房子出租");
houseOwer.send("我是房东:有单间出租");
}
}