Multiple objects interact in complex ways. Without Mediator, every object knows about every other object (many-to-many coupling). With Mediator, objects only know about the mediator (many-to-one). The mediator encapsulates the interaction logic.
// ─── EXAMPLE 1 ──────────────────────────────────────────────────────────────
// WHAT WE ARE IMPLEMENTING:
// An aviation control tower regulating flight paths and runway clearances for
// multiple landing airplanes.
//
// WHERE THE MEDIATOR FITS IN:
// AirportControlTower acts as the Mediator. Flight acts as the Colleague
// interface. Planes communicate solely through the tower to prevent
// collisions.
// ────────────────────────────────────────────────────────────────────────────
import java.util.ArrayList;
import java.util.List;
// --- Mediator ---
interface ChatMediator {
void sendMessage(String message, User sender);
void addUser(User user);
}
// --- Concrete mediator ---
class ChatRoom implements ChatMediator {
private final List<User> users = new ArrayList<>();
public void addUser(User user) {
users.add(user);
System.out.println(" [Room] " + user.getName() + " joined");
}
public void sendMessage(String message, User sender) {
for (User user : users) {
// Don't send back to sender
if (user != sender) {
user.receive(message, sender.getName());
}
}
}
}
// --- Colleague ---
class User {
private final String name;
private final ChatMediator mediator;
public User(String name, ChatMediator mediator) {
this.name = name;
this.mediator = mediator;
}
public String getName() { return name; }
public void send(String message) {
System.out.println(" [" + name + "] Sending: " + message);
mediator.sendMessage(message, this);
}
public void receive(String message, String from) {
System.out.println(" [" + name + "] Received from " + from + ": " + message);
}
}
public class Main {
public static void main(String[] args) {
ChatMediator chatRoom = new ChatRoom();
User alice = new User("Alice", chatRoom);
User bob = new User("Bob", chatRoom);
User charlie = new User("Charlie", chatRoom);
chatRoom.addUser(alice);
chatRoom.addUser(bob);
chatRoom.addUser(charlie);
System.out.println("\n--- Alice sends a message ---");
alice.send("Hello everyone!");
}
}