Defines an object that encapsulates how a set of objects interact, reducing direct dependencies.
Objects communicate through the mediator instead of directly.
class ChatRoom {
final List<User> _users = [];
void join(User user) {
_users.add(user);
user._room = this;
}
void send(String message, User sender) {
for (final user in _users) {
if (user != sender) user.receive(message, sender.name);
}
}
}
class User {
final String name;
ChatRoom? _room;
User(this.name);
void send(String message) => _room?.send(message, this);
void receive(String message, String from) => print('$name got "$message" from $from');
}
// Usage
final room = ChatRoom();
final alice = User('Alice');
final bob = User('Bob');
room.join(alice);
room.join(bob);
alice.send('Hi!'); // Bob got "Hi!" from Alice