28 行为型模式-中介者模式
1 中介者模式介绍
2 中介者模式原理
3 中介者模式实现
/**
* 抽象中介者
**/
public interface Mediator {
//处理同事对象注册与转发同事对象信息的方法
void apply(String key);
}
/**
* 具体中介者
**/
public class MediatorImpl implements Mediator {
@Override
public 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);
}
@Override
public void exec(String key) {
System.out.println("=====在A同事中,通过中介者执行!");
getMediator().apply(key);
}
}
/**
* 具体同事类
**/
public class ConcreteColleagueB extends Colleague{
public ConcreteColleagueB(Mediator mediator) {
super(mediator);
}
@Override
public 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;
}
@Override
public 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 中介者模式总结