Mediator



This content originally appeared on DEV Community and was authored by Prashant Mishra

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

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

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

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...

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


This content originally appeared on DEV Community and was authored by Prashant Mishra