中介者模式实例java
时间: 2023-10-14 14:28:29 浏览: 43
中介者模式(Mediator Pattern)是一种行为型设计模式,它允许将对象间的通信封装到一个中介对象中,从而使得对象间不再直接相互引用,降低了对象间的耦合度。
下面是一个简单的中介者模式实例,我们假设有三个类:用户(User)、聊天室(ChatRoom)和中介者(ChatMediator)。其中,用户类包含了用户的姓名和中介者实例,聊天室类包含了聊天室名称和中介者实例,中介者类包含了用户列表和聊天室实例,以及处理用户间通信的方法。
User.java
```java
public class User {
private String name;
private ChatMediator chatMediator;
public User(String name, ChatMediator chatMediator) {
this.name = name;
this.chatMediator = chatMediator;
}
public String getName() {
return name;
}
public void sendMessage(String message) {
chatMediator.sendMessage(message, this);
}
public void receiveMessage(String message) {
System.out.println(name + " received message: " + message);
}
}
```
ChatRoom.java
```java
public class ChatRoom {
private String name;
private ChatMediator chatMediator;
public ChatRoom(String name, ChatMediator chatMediator) {
this.name = name;
this.chatMediator = chatMediator;
}
public String getName() {
return name;
}
public void sendMessage(String message, User user) {
chatMediator.sendMessage(message, user);
}
}
```
ChatMediator.java
```java
import java.util.ArrayList;
import java.util.List;
public class ChatMediator {
private List<User> users;
private ChatRoom chatRoom;
public ChatMediator(ChatRoom chatRoom) {
this.chatRoom = chatRoom;
this.users = new ArrayList<>();
}
public void addUser(User user) {
users.add(user);
}
public void sendMessage(String message, User user) {
for (User u : users) {
if (u != user) {
u.receiveMessage(message);
}
}
}
}
```
使用中介者模式,我们可以创建多个用户和聊天室,并将它们注册到中介者中,从而实现用户间的通信。
Main.java
```java
public class Main {
public static void main(String[] args) {
ChatRoom chatRoom = new ChatRoom("Java Chat Room", new ChatMediator());
User user1 = new User("Alice", chatMediator);
User user2 = new User("Bob", chatMediator);
User user3 = new User("Charlie", chatMediator);
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
user1.sendMessage("Hello, everyone!");
}
}
```
输出结果:
```
Bob received message: Hello, everyone!
Charlie received message: Hello, everyone!
```