中介者模式是一种行为型设计模式,它可以通过封装一系列对象之间的交互,来降低这些对象之间的耦合度。中介者模式将对象之间的交互转移到中介者对象中,使得对象之间只需要和中介者对象交互,而不需要直接和其他对象交互,从而实现了解耦。
举个简单的例子来说明中介者模式。假设有一个聊天室应用程序,其中有多个用户可以在聊天室中互相发送消息。我们可以使用中介者模式来实现这个应用程序,其中聊天室就是中介者对象,而聊天室中的每个用户都是同等的,他们都需要通过聊天室来发送和接收消息。
下面是一个简单的实现示例:
// 抽象用户类
abstract class User {
protected ChatRoom chatRoom;
protected String name;
public User(String name, ChatRoom chatRoom) {
this.name = name;
this.chatRoom = chatRoom;
}
public abstract void send(String message);
public abstract void receive(String message);
}
// 具体用户类
class ChatUser extends User {
public ChatUser(String name, ChatRoom chatRoom) {
super(name, chatRoom);
}
@Override
public void send(String message) {
System.out.println(this.name + " 发送消息:" + message);
chatRoom.sendMessage(message, this);
}
@Override
public void receive(String message) {
System.out.println(this.name + " 收到消息:" + message);
}
}
// 聊天室类,作为中介者对象
class ChatRoom {
public void sendMessage(String message, User user) {
System.out.println(user.name + " 发送了消息:" + message);
// 将消息发送给其他用户
for (User u : users) {
if (u != user) {
u.receive(message);
}
}
}
private List<User> users = new ArrayList<>();
public void addUser(User user) {
users.add(user);
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
ChatRoom chatRoom = new ChatRoom();
User user1 = new ChatUser("小明", chatRoom);
User user2 = new ChatUser("小红", chatRoom);
User user3 = new ChatUser("小刚", chatRoom);
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
user1.send("大家好!");
}
}
测试结果为:
小名发送了消息:大家好!
小红收到消息:大家好!
小刚收到消息:大家好!
在上面的代码中,我们定义了一个抽象的用户类 User,其中包含一个聊天室对象 chatRoom,表示该用户所在的聊天室。我们还定义了一个具体的用户类 ChatUser,其中实现了 send( ) 和 receive( ) 方法,用于发送和接收消息。我们还定义了一个聊天室类 ChatRoom,作为中介者对象,其中定义了一个sendMessage( ) 方法,用于将消息发送给其他用户。
在测试代码中,我们创建了三个用户对象,并将它们添加到聊天室中,然后让其中一个用户发送了一条消息。这时,聊天室对象就会将消息发送给其他用户,其他用户也会接收到消息。
通过上面的示例代码,可以看到中介者模式的主要思想是将对象之间的交互转移到中介者对象中,从而降低对象之间的耦合度。在实际应用中,中介者模式可以被用来解决复杂的对象之间交互的问题,从而使得系统更加灵活和可扩展。