Skip to content

Latest commit

 

History

History
102 lines (79 loc) · 2.77 KB

设计模式-Mediator.md

File metadata and controls

102 lines (79 loc) · 2.77 KB

Mediator(中介者模式)

概述

中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。 这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。 中介者模式属于行为型模式。

使用

示例

我们来模拟一下,通过中介租房的过程。

实现

  1. 创建一个需要租房的人
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() + ":我想租房!");
    }
}
  1. 创建房东
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() + ":我想把房子租出去!");
    }

}
  1. 创建中介负责把房东的房子租给租户
public class Mediator {

    public void handle(Person person, Landlord landlord) {
        person.lease();
        landlord.hire();
        System.out.println("中介将" + landlord.getName() + "的房子租给了" + person.getName());
    }

}
  1. 测试
public class MediatorTest {

    @Test
    public void testMediator() {
        Person person = new Person("张三");
        Landlord landlord = new Landlord("李四");

        Mediator mediator = new Mediator();
        mediator.handle(person, landlord);

    }
}
  1. 输出
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: 中介将李四的房子租给了张三

通过输出信息可以看出,通过中介将房东李四的房子租给了张三。

使用场景

  1. 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
  2. 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

主要解决

对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。

优点

  1. 降低了类的复杂度,将一对多转化成了一对一。
  2. 各个类之间的解耦。
  3. 符合迪米特原则。

缺点

中介者会庞大,变得复杂难以维护。

注意事项

不应当在职责混乱的时候使用。