design-patterns

Quick-reference guide to software design patterns with concise Dart examples.

View project on GitHub

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