TechnologyZer
technologyzer.com

Empowering Connections: Harnessing the Mediator Design Pattern for Effective Messaging

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.

Mediator Design Pattern is employed in the development of a chat messaging system.

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!");
    }
}

Leave a Comment