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