中介者

58 阅读1分钟

中介者模式(Mediator Pattern)是一种行为型模式,它将多个对象之间的交互封装在一个中介对象中,使得对象之间没有直接的引用关系,从而降低了对象之间的耦合度。

中介者模式的主要角色如下:

  • 抽象中介者(Mediator):定义了同事对象之间通信的接口。
  • 具体中介者(ConcreteMediator):实现了抽象中介者接口,并负责协调同事对象之间的交互。
  • 同事对象(Colleague):与其他同事对象和中介者进行通信。

中介者模式的实现如下:

// 抽象中介者
public interface Mediator {
  void send(String message, Colleague colleague);
}

// 具体中介者
public class ConcreteMediator implements Mediator {
  private List<Colleague> colleagues = new ArrayList<>();

  @Override
  public void send(String message, Colleague colleague) {
    for (Colleague c : colleagues) {
      if (c != colleague) {
        c.receive(message);
      }
    }
  }

  public void addColleague(Colleague colleague) {
    colleagues.add(colleague);
  }

  public void removeColleague(Colleague colleague) {
    colleagues.remove(colleague);
  }
}

// 同事对象
public abstract class Colleague {
  protected Mediator mediator;

  public Colleague(Mediator mediator) {
    this.mediator = mediator;
  }

  public abstract void receive(String message);
}

// 具体同事对象1
public class ConcreteColleague1 extends Colleague {
  public ConcreteColleague1(Mediator mediator) {
    super(mediator);
  }

  @Override
  public void receive(String message) {
    System.out.println("具体同事对象1收到消息:" + message);
  }
}

// 具体同事对象2
public class ConcreteColleague2 extends Colleague {
  public ConcreteColleague2(Mediator mediator) {
    super(mediator);
  }

  @Override
  public void receive(String message) {
    System.out.println("具体同事对象2收到消息:" + message);
  }
}

public class Main {
  public static void main(String[] args) {
    // 创建中介者
    Mediator mediator = new ConcreteMediator();

    // 创建同事对象
    Colleague colleague1 = new ConcreteColleague1(mediator);
    Colleague colleague2 = new ConcreteColleague2(mediator);

    // 将同事对象添加到中介者中
    mediator.addColleague(colleague1);
    mediator.addColleague(colleague2);

    // 同事对象通过中介者进行通信
    colleague1.send("消息1");
    colleague2.send("消息2");
  }
}