designpatterns/behavioral booknotes
Mediator
âMEDIATORâ
âAlexander Shvets, âDive Into Design Patternsâ
Objects talk to the mediator, not directly to each other.
aka Intermediary, Controller.
The Mediator Pattern is a behavioral design pattern that defines an object (mediator) to centralize communication between a set of objects (called colleagues), so they donât communicate directly with each other.

Structure

Code Examples
import java.util.ArrayList;
import java.util.List;
// Mediator interface
interface ChatRoomMediator {
void sendMessage(String message, User user);
}
// Concrete Mediator
class ChatRoom implements ChatRoomMediator {
private List<User> users = new ArrayList<>();
public void addUser(User user) {
users.add(user);
}
public void sendMessage(String message, User sender) {
for (User user : users) {
if (user != sender) {
user.receive(message);
}
}
}
}
// Colleague (abstract)
abstract class User {
protected ChatRoomMediator mediator;
protected String name;
public User(ChatRoomMediator mediator, String name) {
this.mediator = mediator;
this.name = name;
}
public abstract void send(String message);
public abstract void receive(String message);
}
// Concrete Colleague
class ChatUser extends User {
public ChatUser(ChatRoomMediator mediator, String name) {
super(mediator, name);
}
public void send(String message) {
System.out.println(this.name + " sends: " + message);
mediator.sendMessage(message, this);
}
public void receive(String message) {
System.out.println(this.name + " receives: " + message);
}
}
// Main class to run the demo
public class MediatorPatternDemo {
public static void main(String[] args) {
ChatRoom chatRoom = new ChatRoom();
User alice = new ChatUser(chatRoom, "Alice");
User bob = new ChatUser(chatRoom, "Bob");
User charlie = new ChatUser(chatRoom, "Charlie");
chatRoom.addUser(alice);
chatRoom.addUser(bob);
chatRoom.addUser(charlie);
alice.send("Hello everyone!");
bob.send("Hey Alice!");
}
}