Table of Contents
Introduction to Mediator Design Pattern
Mediator Design Pattern is a behavioral design pattern that promotes loose coupling between objects by introducing a central component known as the mediator. The main idea behind this pattern is to have objects communicate with each other indirectly through the mediator, rather than directly interacting with each other.
In the following example, we are building a simple chat application where users can communicate with each other through a central chat room (the mediator), rather than directly interacting with each other.

Sample code for Chat Application System using Mediator Design Pattern
// Colleague interface
abstract class User {
private String name;
protected ChatMediator mediator;
public User(String name, ChatMediator mediator) {
this.name = name;
this.mediator = mediator;
}
public String getName() {
return name;
}
public abstract void sendMessage(String message);
public abstract void receiveMessage(String message);
}
// Concrete Colleague
class BasicUser extends User {
public BasicUser(String name, ChatMediator mediator) {
super(name, mediator);
}
@Override
public void sendMessage(String message) {
System.out.println(getName() + " sends message: " + message);
mediator.sendMessage(this, message);
}
@Override
public void receiveMessage(String message) {
System.out.println(getName() + " receives message: " + message);
}
}
// Mediator interface
interface ChatMediator {
void addUser(User user);
void sendMessage(User user, String message);
}
// Concrete Mediator
class ChatRoom implements ChatMediator {
private List<User> users;
public ChatRoom() {
this.users = new ArrayList<>();
}
@Override
public void addUser(User user) {
users.add(user);
}
@Override
public void sendMessage(User user, String message) {
for (User u : users) {
// Send the message to all users except the sender
if (!u.getName().equals(user.getName())) {
u.receiveMessage(message);
}
}
}
}
public class MediatorPatternExample {
public static void main(String[] args) {
// Create a mediator (chat room)
ChatRoom chatRoom = new ChatRoom();
// Create users and add them to the chat room
User user1 = new BasicUser("user1: ", chatRoom);
User user2 = new BasicUser("user2: ", chatRoom);
User user3 = new BasicUser("user3: ", chatRoom);
chatRoom.addUser(user1);
chatRoom.addUser(user2);
chatRoom.addUser(user3);
// User 1 sends a message
user1.sendMessage("Hello everyone!");
// User 2 sends a message
user2.sendMessage("Hi there!");
// User 3 sends a message
user3.sendMessage("Hey!");
}
}