中介者模式是一种行为设计模式,它允许对象之间通过一个中介者对象进行交互,而不是直接相互引用,从而降低耦合度。中介者模式很好地实现了 “松耦合” 的设计原则。

结构

  • 中介者接口(Mediator): 定义了对象之间交互的方法,各个具体的中介者类实现这些方法。
public interface Mediator {
    void sendMessage(String message, Colleague colleague);
}
  • 具体中介者类(Concrete Mediator): 实现了中介者接口,负责协调各个同事对象之间的交互。
public class ConcreteMediator implements Mediator {
    private Colleague colleague1;
    private Colleague colleague2;

    public void setColleague1(Colleague colleague1) {
        this.colleague1 = colleague1;
    }

    public void setColleague2(Colleague colleague2) {
        this.colleague2 = colleague2;
    }

    public void sendMessage(String message, Colleague colleague) {
        if (colleague == colleague1) {
            colleague2.receiveMessage(message);
        } else {
            colleague1.receiveMessage(message);
        }
    }
}
  • 同事类(Colleague): 每个同事类知道它的中介者对象,并且与中介者通信。
public abstract class Colleague {
    private Mediator mediator;

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

    public void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }

    public abstract void receiveMessage(String message);
}

优点和缺点

优点:

  1. 降低了对象之间的耦合度: 对象之间不再直接引用其他对象,而是通过中介者进行通信,降低了对象之间的耦合度。
  2. 集中控制交互逻辑: 中介者模式集中了对象之间的交互逻辑,使得交互变得更加集中和可控。
  3. 易于扩展: 可以新增具体的中介者类和同事类,而无需修改已有的代码。

缺点:

  1. 中介者过于复杂: 如果中介者的逻辑过于复杂,可能会变得难以维护和理解。

示例

考虑一个聊天室的例子。聊天室中有多个用户(同事类),它们可以相互发送消息,但是不直接连接到彼此。中介者(聊天室)负责接收每个用户的消息并将消息发送给其他用户。

public class Main {
    public static void main(String[] args) {
        Mediator chatRoom = new ConcreteMediator();
        
        Colleague user1 = new User(chatRoom, "User 1");
        Colleague user2 = new User(chatRoom, "User 2");

        chatRoom.setColleague1(user1);
        chatRoom.setColleague2(user2);

        user1.sendMessage("Hello, User 2!");
        user2.sendMessage("Hi, User 1!");
    }
}

在这个例子中,User 是同事类,ConcreteMediator 是具体中介者类。用户通过中介者对象 chatRoom 发送消息,中介者负责将消息发送给其他用户。这样,用户之间的通信通过中介者实现,而不是直接连接到彼此。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注