中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。 这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。 中介者模式属于行为型模式。
我们来模拟一下,通过中介租房的过程。
- 创建一个需要租房的人
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void lease() {
System.out.println(getName() + ":我想租房!");
}
}
- 创建房东
public class Landlord {
private String name;
public Landlord(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void hire() {
System.out.println(getName() + ":我想把房子租出去!");
}
}
- 创建中介负责把房东的房子租给租户
public class Mediator {
public void handle(Person person, Landlord landlord) {
person.lease();
landlord.hire();
System.out.println("中介将" + landlord.getName() + "的房子租给了" + person.getName());
}
}
- 测试
public class MediatorTest {
@Test
public void testMediator() {
Person person = new Person("张三");
Landlord landlord = new Landlord("李四");
Mediator mediator = new Mediator();
mediator.handle(person, landlord);
}
}
- 输出
03-23 13:23:39.911 10396-10417/com.jeanboy.app.designpatterns I/System.out: 张三:我想租房!
03-23 13:23:39.911 10396-10417/com.jeanboy.app.designpatterns I/System.out: 李四:我想把房子租出去!
03-23 13:23:39.911 10396-10417/com.jeanboy.app.designpatterns I/System.out: 中介将李四的房子租给了张三
通过输出信息可以看出,通过中介将房东李四的房子租给了张三。
- 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
- 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
- 降低了类的复杂度,将一对多转化成了一对一。
- 各个类之间的解耦。
- 符合迪米特原则。
中介者会庞大,变得复杂难以维护。
不应当在职责混乱的时候使用。