Design patterns

patterns17MediatorPattern

Path
pkg8patterns/patterns17MediatorPattern.java
Package
pkg8patterns
Study order
17
Run
Single-file source launch
Command
java pkg8patterns/patterns17MediatorPattern.java

There is no in-browser runner. This is the file from the curriculum, unchanged.

pkg8patterns/patterns17MediatorPattern.java
1package pkg8patterns;2 3/*4 * Mediator (Behavioral)5 * ---------------------6 * INTENT: define an object that encapsulates how a set of objects interact,7 *         promoting loose coupling by keeping objects from referring to each other.8 * UML: Mediator <-- Colleagues ; colleagues talk through the mediator.9 * PROS: centralizes complex communication; reduces many-to-many coupling.10 * CONS: mediator can become a complex "god" object.11 * REAL-WORLD: chat rooms, air traffic control, UI form field coordination.12 */13import java.util.*;14 15public class patterns17MediatorPattern {16 17    interface ChatRoom { void register(User u); void send(String from, String msg); }18 19    static class ChatRoomImpl implements ChatRoom {20        private final Map<String, User> users = new HashMap<>();21        public void register(User u) { users.put(u.name, u); }22        public void send(String from, String msg) {23            for (User u : users.values())24                if (!u.name.equals(from)) u.receive(from, msg);25        }26    }27 28    static class User {29        final String name;30        private final ChatRoom room;31        User(String name, ChatRoom room) { this.name = name; this.room = room; room.register(this); }32        void send(String msg) { System.out.println(name + " sends: " + msg); room.send(name, msg); }33        void receive(String from, String msg) { System.out.println("  " + name + " got from " + from + ": " + msg); }34    }35 36    public static void main(String[] args) {37        ChatRoom room = new ChatRoomImpl();38        User alice = new User("Alice", room);39        new User("Bob", room);40        new User("Cara", room);41        alice.send("Hello everyone!");42    }43}