prashantrmishra

Prashant Mishra

Posted on September 15, 2024

Mediator

One of the behavioral design patterns, allowing objects to communicate with each other with the help of a mediator.
the mediator promotes loose coupling by preventing objects from having direct dependencies on each other. Instead, they use mediators to communicate with each other.

Let's understand this by implementing chatroom where different users chat with each other

Mediator

public interface ChatMediator {
    public void sendMessage(User user, String message);
    public void addUser(User user);
}

public class ChatRoomMediator implements ChatMediator {
    private List<User> users;
    public ChatRoomMediator(){
        this.users = new ArrayList<>();
    }
    @Override
    public void addUser(User u){
        users.add(u);
    }

    @Override
    public void sendMessage(User u, String message){
        for(User user : users){
            if(user!=u){
                user.receive(message);
            }
        }
    }
}

Enter fullscreen mode Exit fullscreen mode

User

public class User {
    ChatMediator mediator;
    private String name;

    public User(String n,ChatMediator m){
        this.name = n;
        this.mediator = m;
    }
    public String getName(){
        return this.name;
    }

    public void send(String message){
        System.out.println(this.name+":sent:"+message);
        mediator.sendMessage(this,message);
    }
    public void receive(String message){
        System.out.println(this.name+":received:"+ message);
    }
}
Enter fullscreen mode Exit fullscreen mode

Main

public class Main {
    public static void main(String args[]){
        ChatMediator mediator = new ChatRoomMediator();
        User user1 = new User("prashant",mediator);
        User user2 = new User("sandeep", mediator);
        User user3 = new User("ajay", mediator);

        mediator.addUser(user3);
        mediator.addUser(user2);
        mediator.addUser(user1);

        user1.send("Hi All");
        user2.send("Hi Prashant");
        user3.send("Hi...");
    }
}
Enter fullscreen mode Exit fullscreen mode

Output:

prashant:sent:Hi All
ajay:received:Hi All
sandeep:received:Hi All
sandeep:sent:Hi Prashant
ajay:received:Hi Prashant
prashant:received:Hi Prashant
ajay:sent:Hi...
sandeep:received:Hi...
prashant:received:Hi...
Enter fullscreen mode Exit fullscreen mode

Key points

  • User objects are loosely coupled, i.e even if some users are deleted or modified it will not affect any other user
  • Mediator is the middle man between all users
💖 💪 🙅 🚩
prashantrmishra
Prashant Mishra

Posted on September 15, 2024

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

Mediator
java Mediator

September 15, 2024