1 中介者模式介绍
2 中介者模式原理
3 中介者模式实现
/*** 抽象中介者**/
public interface Mediator {//处理同事对象注册与转发同事对象信息的方法void apply(String key);
}
/*** 具体中介者**/
public class MediatorImpl implements Mediator {@Overridepublic void apply(String key) {System.out.println("最终中介者执行的操作,key为" + key);}
}
/*** 抽象同事类**/
public abstract class Colleague {private Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}public Mediator getMediator() {return mediator;}//同事间进行交互的抽象方法public abstract void exec(String key);
}
/*** 具体同事类**/
public class ConcreteColleagueA extends Colleague{public ConcreteColleagueA(Mediator mediator) {super(mediator);}@Overridepublic void exec(String key) {System.out.println("=====在A同事中,通过中介者执行!");getMediator().apply(key);}
}
/*** 具体同事类**/
public class ConcreteColleagueB extends Colleague{public ConcreteColleagueB(Mediator mediator) {super(mediator);}@Overridepublic void exec(String key) {System.out.println("=====在B同事中,通过中介者执行!");getMediator().apply(key);}
}
public class Client {public static void main(String[] args) {//创建中介者Mediator mediator = new MediatorImpl();//创建同事对象Colleague c1 = new ConcreteColleagueA(mediator);c1.exec("key-A");Colleague c2 = new ConcreteColleagueB(mediator);c2.exec("key-B");}
}
4 中介者模式应用实例
【例】租房
/*** 抽象中介者**/
public abstract class Mediator {//创建联络方法public abstract void contact(String message, Person person);
}
/*** 抽象同事类**/
public abstract class Person {protected String name;//持有中介者的引用protected Mediator mediator;public Person(String name, Mediator mediator) {this.name = name;this.mediator = mediator;}
}
/*** 具体的中介者-中介机构**/
public class MediatorStructure extends Mediator {//中介知晓 房租出租人和承租人的信息private HouseOwner houseOwner; //房主private Tenant tenant; //租房者public Tenant getTenant() {return tenant;}public void setTenant(Tenant tenant) {this.tenant = tenant;}public HouseOwner getHouseOwner() {return houseOwner;}public void setHouseOwner(HouseOwner houseOwner) {this.houseOwner = houseOwner;}@Overridepublic void contact(String message, Person person) {if(person == houseOwner){//如果是房主,则租房者获得信息tenant.getMessage(message);}else{//如果是租房者,则房租获得信息houseOwner.getMessage(message);}}
}
/*** 具体同事类-房租拥有者**/
public class HouseOwner extends Person {public HouseOwner(String name, Mediator mediator) {super(name, mediator);}//与中介联系public void contact(String message){mediator.contact(message,this);}//获取信息public void getMessage(String message){System.out.println("房主: " + name +",获取到的信息: " + message);}
}
/*** 具体同事类-承租人**/
public class Tenant extends Person {public Tenant(String name, Mediator mediator) {super(name, mediator);}public void contact(String message){mediator.contact(message,this);}public void getMessage(String message){System.out.println("租房者"+name+",获取到的信息: " + message);}
}
public class Client {public static void main(String[] args) {//中介机构MediatorStructure mediator = new MediatorStructure();//房主HouseOwner houseOwner = new HouseOwner("张三", mediator);//租房者Tenant tenant = new Tenant("李四", mediator);//中介收集房主及租房者信息mediator.setHouseOwner(houseOwner);mediator.setTenant(tenant);//租房人的需求tenant.contact("需要在天通苑附近找一个,两室一厅的房子一家人住,房租在5000~6000之间");//房主的需求houseOwner.contact("出租一套天通苑地跌站附近的两室一厅,房租6000,可谈");}
}
5 中介者模式总结