/** * 中介者模式:中介在生活中是很常见的,如房屋中介,使用了中介模式后,普通对象之间的交流就通过中介来进行,避免了相互进行依赖 * 模式特点:一个中介接口和其实现类,该实现类拥有所有的普通对象的引用 * 每个普通对象都引用一个中介对象 * */ //中介接口 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("我是房东:有单间出租"); } }