The Mediator pattern promotes loose coupling between objects by introducing a mediator that handles communication between them. This reduces dependencies and makes the system more flexible and maintainable.
A Simple Chat Room Example
Let’s consider a basic chat room application with multiple users. Instead of users communicating directly with each other, they’ll send messages to a chat room (the mediator), which then broadcasts the message to all users.
1. Define the Mediator Interface:
interface ChatRoom {
void registerUser(User user);
void send(String msg, User user);
}
2. Create a Concrete Mediator:
class ChatRoomImpl implements ChatRoom {
private List<User> users = new ArrayList<>();
@Override
public void registerUser(User user) {
users.add(user);
}
@Override
public void send(String msg, User user) {
for (User u : users) {
if (u != user) {
u.receive(msg);
}
}
}
}
3. Define the User Interface:
interface User {
void send(String msg);
void receive(String msg);
}
4. Create Concrete Users:
class UserImpl implements User {
private ChatRoom chatRoom;
private String name;
public UserImpl(ChatRoom chatRoom, String name) {
this.chatRoom = chatRoom;
this.name = name;
}
@Override
public void send(String msg) {
chatRoom.send(msg, this);
}
@Override
public void receive(String msg) {
System.out.println(name + " received: " + msg);
}
}
5. Client Code:
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatRoom chatRoom = new ChatRoomImpl();
User user1 = new UserImpl(chatRoom, "User1");
User user2 = new UserImpl(chatRoom, "User2");
chatRoom.registerUser(user1);
chatRoom.registerUser(user2);
user1.send("Hello, everyone!");
user2.send("Hi there!");
}
}
How it Works
- Users interact with the ChatRoom (mediator) to send messages.
- The ChatRoom broadcasts the message to all registered Users.
- Users receive the message and display it.
Key Benefits:
- Loose coupling: Users don’t need to know about each other.
- Flexibility: Adding new users or changing the message handling logic is easier.
- Maintainability: The code is more organized and easier to understand.