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