设计模式 中介者模式
概念
结构
案例实现
定义一个抽象中介者
//抽象中介者
public abstract class Mediator {
//声明一个联络方法
public abstract void contact(String message,Person person);
}
抽象同事类
@AllArgsConstructor
public abstract class Person {
protected String name;
protected Mediator mediator;
}
定义房东
public class HouserOwner extends Person{
public HouserOwner(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);
}
}
具体实现中介者
@Data
public class MediatorStructure extends Mediator{
private HouserOwner houserOwner;
private Tenant tenant;
@Override
public void contact(String message, Person person) {
if(person == houserOwner){
tenant.getMessage(message);
}
else {
houserOwner.getMessage(message);
}
}
}
测试使用
public class Client {
public static void main(String[] args) {
MediatorStructure mediatorStructure = new MediatorStructure();
//租房者和房主需要知道中介者
HouserOwner houserOwner = new HouserOwner("张三",mediatorStructure);
Tenant tenant = new Tenant("李四",mediatorStructure);
//在中介机构注册类
mediatorStructure.setHouserOwner(houserOwner);
mediatorStructure.setTenant(tenant);
//测试使用
tenant.contact("有房子吗 需租一个");
houserOwner.contact("我这有");
}
}