1. 中介者模式概述
中介者模式是用来降低多个对象和类之间的通信复杂性。
这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。
(1) 适用情况
当对象与对象之间存在大量的关联关系,相互耦合时,可以考虑使用中介者模式来进行解耦。
(2) 优点
降低了类的复杂度,将一对多变成了一对一。
(3) 缺点
中介者会庞大,难以维护。
2. 中介者模式实例
使用中介者模式,来实现一个简单的租房功能。
(1) 实现用户类
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
(2) 实现房间类
public class Room {
private int id;
private User owner;
private String address;
private float price;
public Room(int id, String address, float price) {
this.id = id;
this.address = address;
this.price = price;
}
public int getId() {
return id;
}
public User getOwner() {
return owner;
}
public void setOwner(User owner) {
this.owner = owner;
}
public String getAddress() {
return address;
}
public float getPrice() {
return price;
}
}
(3) 实现中介者
public class Mediator {
private Map<Integer, Room> map = new HashMap<>();
public void rentRoom(User user, int roomId) {
Room room = map.get(roomId);
if (room == null) {
System.out.println("房子" + roomId + "已出租。");
return;
}
System.out.println("[" + new Date().toString() + "] " + user.getName() + "以" + room.getPrice() +
"元/平米的价格,租下了房主" + room.getOwner().getName() + "位于" + room.getAddress() + "的房子:" + room.getId());
map.remove(roomId);
}
public void registerRoom(User user, Room room) {
room.setOwner(user);
map.put(room.getId(), room);
}
}
(4) 租房
public class MediatorDemo {
public static void main(String[] args) {
Mediator mediator = new Mediator();
User user1 = new User("小明");
User user2 = new User("小红");
User user3 = new User("小亮");
User user4 = new User("小刚");
Room room1 = new Room(1, "璀璨明珠", 2000L);
Room room2 = new Room(2, "东方米兰", 1500L);
// 去中介处注册房子
mediator.registerRoom(user1, room1);
mediator.registerRoom(user2, room2);
// 找中介租房子
mediator.rentRoom(user3, 1);
mediator.rentRoom(user4, 2);
}
}
运行结果:
3. 一些思考
如果没有中介的话,租客租不同的房子的时候需要直接去联系不同的房主才行,这样对于一个租客来说,就是一对多的关系。如果有了中介,租客只需要去找中介就好了,就变成了一对一的关系。
中介者模式和代理模式有什么区别呢?
个人觉得,从功能上看,中介者模式可以理解为对双方都进行了代理。
从实现上看,更明显的区别是,代理模式中,代理类实际上还是调用的被代理类的接口,而中介者模式则是实现了自己的逻辑。
中介者模式和外观模式有什么区别呢? 外观模式中的外观类是偏向某一方存在的,是一种单向偏向关系。而中介者并不偏向任何一方,双方通过中介者相互和另一方发生关系关系是双向的。
参考引用
中介者模式:www.runoob.com/design-patt…
中介者模式和外观模式区别:blog.csdn.net/qq_41970663…