你和其他对象的关系复杂?让中介者来处理!它封装了所有对象间的交互,减少了直接的沟通,让它们变得更加高效。

在软件设计中,多个对象之间的相互作用往往导致系统变得复杂和难以管理。就像是一个忙碌的公司,员工们需要频繁地沟通和协调,然而这种直接沟通可能导致信息混乱、效率低下。而中介者模式就像是一个公司内部的协调者,它统一管理所有员工的沟通,避免了员工之间的直接联系。通过中介者,员工可以将请求传递给中介,由中介决定如何处理并传达信息,从而简化了系统中的交互关系。

趣味解读:公司里的“行政助理”

想象你在一个大公司工作,团队成员众多,每个人都需要和其他人沟通,然而信息不断地在员工之间传递,结果大家都忙得不可开交。然后,公司引入了一个行政助理,所有沟通都通过她进行:你有问题,只需要向行政助理提问,助理会根据情况找到需要的人并传达信息。这样,你就不再需要与每个员工逐一联系,效率提升,工作也变得更加顺畅。

这就是中介者模式的作用!它通过引入一个中介者来协调对象之间的交互,让对象之间的耦合度降低,系统变得更简洁高效。

Java代码案例:中介者模式 - 简单的聊天室

假设你正在开发一个多人聊天室,每个用户都能发送消息给其他用户,但直接的点对点通信会使得系统非常复杂。中介者模式可以帮你简化这个过程,将消息传递交给中介者(即聊天室)。

// 1. 中介者接口
interface ChatRoom {
    void showMessage(User user, String message);
}
​
// 2. 具体的中介者实现
class ConcreteChatRoom implements ChatRoom {
    @Override
    public void showMessage(User user, String message) {
        System.out.println(user.getName() + ": " + message);
    }
}
​
// 3. 用户类
class User {
    private String name;
    private ChatRoom chatRoom;
​
    public User(String name, ChatRoom chatRoom) {
        this.name = name;
        this.chatRoom = chatRoom;
    }
​
    public String getName() {
        return name;
    }
​
    public void sendMessage(String message) {
        chatRoom.showMessage(this, message);
    }
}
​
// 4. 客户端代码
public class Main {
    public static void main(String[] args) {
        // 创建聊天室
        ChatRoom chatRoom = new ConcreteChatRoom();
​
        // 创建用户
        User user1 = new User("Alice", chatRoom);
        User user2 = new User("Bob", chatRoom);
        User user3 = new User("Charlie", chatRoom);
​
        // 用户发送消息
        user1.sendMessage("Hello, Bob!");
        user2.sendMessage("Hi, Alice!");
        user3.sendMessage("Hey, everyone!");
    }
}

解析:

  • 中介者接口ChatRoom 接口定义了一个方法 showMessage(),用于显示消息。

  • 具体中介者实现ConcreteChatRoom 类实现了 ChatRoom 接口,负责处理消息的显示。

  • 用户类User 类表示聊天室中的每个用户,它通过 sendMessage() 方法向聊天室发送消息。每个用户通过中介者(聊天室)发送和接收消息,而不是直接与其他用户通信。

  • 客户端代码:在 Main 类中,我们创建了一个聊天室和三个用户。用户通过 sendMessage() 方法向聊天室发送消息,聊天室负责将消息传递给其他用户。

运行结果:

Alice: Hello, Bob!
Bob: Hi, Alice!
Charlie: Hey, everyone!

实际应用场景:

  1. UI事件处理:在图形用户界面(GUI)设计中,不同的控件(按钮、文本框等)需要协同工作。通过中介者模式,我们可以通过一个控制器(中介者)来管理控件之间的交互,减少控件间的耦合。

  2. 航空系统调度:在航空调度系统中,不同的航空公司、飞机和地面服务等需要协调工作。通过中介者模式,可以通过一个调度系统(中介者)来协调各方工作,提高效率。

  3. 网络协议协调:在网络通信中,不同的协议和组件可能需要相互协调。中介者模式可以帮助通过一个协议协调中心来管理各种协议之间的通信,简化设计。

总结

中介者模式通过引入一个中介者来处理对象之间的通信,减少了对象之间的直接依赖和耦合。它将复杂的交互管理交给了中介者,使得每个对象只关心自己与中介者的沟通,从而简化了系统的设计并提升了代码的可维护性。无论是在聊天室设计、UI事件处理,还是航空调度等系统中,中介者模式都可以帮助提高系统的效率和可扩展性。