中介者模式是一种行为设计模式,指用一个中介对象来封装一系列的对象交互。
中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在这个模式中,中介者负责协调各个对象间的通信,使其流程更加清晰简单。
场景
中介者模式可以应用于多个对象之间有复杂的交互关系的场景,例如一个大型软件系统中的模块之间的协作、多个部门之间的协作等。中介者模式可以简化对象之间的交互,使得对象之间的耦合度降低。具体来说,通过引入中介者对象,可以让对象之间的通信集中在中介者对象上,从而避免了对象之间的直接依赖关系,提高了系统的可维护性和可扩展性。
优点
缺点
以房屋中介为例:
1.定义用户
/**
* 用户
*/
public class User {
/**
* 姓名
*/
private final String name;
/**
* 电话
*/
private final String phone;
/**
* 构造姓名和电话
* @param name 姓名
* @param phone 电话
*/
public User(String name, String phone) {
this.name = name;
this.phone = phone;
}
/**
* 需要具体想找的地址和中介
* @param address 地址
* @param mediator 中介
* @return 用户
*/
public User find(String address, Mediator mediator) {
// 中介根据地址找房
return mediator.find(address);
}
@Override
public String toString() {
return "(姓名:" + name + ",电话:" + phone + ")";
}
}
2.定义中介
/**
* 中介
*/
public class Mediator {
/**
* 存储在售房屋
*/
private final Map userMap = new HashMap<>();
/**
* 登记房屋
* @param address 地址
* @param user 用户
*/
public void register(String address, User user) {
userMap.put(address, user);
}
/**
* 查找房源
* @param address 地址
* @return 房东
*/
public User find(String address) {
return userMap.get(address);
}
}
3.调用
public class Client {
public static void main(String[] args) {
// 房东
User landlord = new User("AA", "10011");
// 租客
User tenant = new User("BB", "10022");
// 中介
Mediator mediator = new Mediator();
// 中介登记房产
mediator.register("深圳市深圳湾一号", landlord);
// 租客委托中介查找符合要求房子的房东
User result = tenant.find("深圳市宝安区城中村", mediator);
if (result == null) {
System.out.println("没有找到对应的房源");
} else {
System.out.print("成功找到对应房源:");
System.out.println(result);
}
// 再次查找
result = tenant.find("深圳市深圳湾一号", mediator);
if(result == null) {
System.out.println("没有找到对应的房源");
} else {
System.out.print("成功找到对应房源:");
System.out.println(result);
}
}
}
控制台输出:
没有找到对应的房源
成功找到对应房源:(姓名:AA,电话:10011)
这样就实现了日常生活中的通过中介租房。