Java 中介者模式:软件世界的 “和事佬” 大揭秘

146 阅读3分钟

在 Java 编程的江湖里,各种对象就像一个个性格迥异的大侠,它们之间的交互常常会变得错综复杂。这时候,中介者模式就宛如一位智慧的 “和事佬”,翩然而至,让混乱的局面变得井井有条。今天,咱就来好好扒一扒这个 Java 中的中介者模式。

一、中介者模式是啥?

想象一下,在一个武侠世界里,有各门各派的武林高手(对象)。如果没有一个协调者,他们之间的切磋、合作、恩怨情仇的处理将会乱成一锅粥。中介者模式干的就是这个协调者的活儿。它在众多对象之间建立起一座沟通的桥梁,让对象们不再直接相互依赖、相互调用,而是通过中介者来进行信息传递与交互。这样一来,各个对象的职责更加单一,耦合度大大降低,整个系统的灵活性和可维护性也就提升了。

二、代码示例走一波

假设我们正在构建一个简单的聊天系统,有多个用户(User)在不同的聊天室(ChatRoom)里聊天。如果没有中介者,每个用户都要和其他用户建立连接并处理消息,那代码简直就是一团乱麻。这时候,中介者(ChatMediator)就该登场了。

首先,定义用户类:

class User {
    private String name;
    private ChatMediator mediator;
    public User(String name, ChatMediator mediator) {
        this.name = name;
        this.mediator = mediator;
        mediator.addUser(this);
    }
    public void sendMessage(String message) {
        mediator.sendMessage(message, this);
    }
    public void receiveMessage(String message) {
        System.out.println(name + " 收到消息: " + message);
    }
}

然后是中介者接口:

interface ChatMediator {
    void addUser(User user);
    void sendMessage(String message, User sender);
}

以及中介者接口的实现类:

class ConcreteChatMediator implements ChatMediator {
    private List<User> users = new ArrayList<>();
    @Override
    public void addUser(User user) {
        users.add(user);
    }
    @Override
    public void sendMessage(String message, User sender) {
        for (User user : users) {
            if (!user.equals(sender)) {
                user.receiveMessage(message);
            }
        }
    }
}

最后来测试一下:

public class MediatorPatternDemo {
    public static void main(String[] args) {
        ChatMediator mediator = new ConcreteChatMediator();
        User user1 = new User("令狐冲", mediator);
        User user2 = new User("任盈盈", mediator);
        User user3 = new User("岳不群", mediator);
        user1.sendMessage("大家好,我是令狐冲!");
    }
}

运行结果就是任盈盈和岳不群都能收到令狐冲的消息。通过中介者模式,用户们只需要和中介者交互,而不用管其他用户的具体情况,是不是简洁很多?

三、中介者模式的优缺点

优点那是相当明显。首先,它解耦了各个对象之间的复杂关系,让系统的结构更加清晰。就像把一团乱麻梳理成了一根根整齐的丝线。其次,它增强了系统的可维护性和可扩展性。如果要添加新的用户类型或者新的聊天功能,只需要在中介者和相关对象中进行修改,不会牵一发而动全身。

不过,任何东西都不是完美的。中介者模式也有个小缺点,如果中介者变得过于庞大复杂,它就可能成为系统的一个 “瓶颈”。就好比一个城市里所有的交通都要通过一个超级枢纽,一旦这个枢纽出了问题,整个城市的交通就瘫痪了。所以在使用的时候,也要把握好度。

中介者模式就像是 Java 编程中的一把 “瑞士军刀”,在处理对象间复杂交互时特别好用。但一定要记得合理使用,别让这个 “和事佬” 变成了 “麻烦精”。下次再给大家分享其他有趣的设计模式,敬请期待哦!