design-patterns

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

View project on GitHub

Passes a request along a chain of handlers. Each handler decides to process or pass it on.

Decouples sender from receiver.

abstract class Handler {
  Handler? next;

  Handler setNext(Handler handler) { next = handler; return handler; }

  String? handle(int amount) {
    return next?.handle(amount);
  }
}

class SmallHandler extends Handler {
  @override
  String? handle(int amount) {
    if (amount < 100) return 'SmallHandler approved \$$amount';
    return super.handle(amount);
  }
}

class LargeHandler extends Handler {
  @override
  String? handle(int amount) {
    if (amount < 10000) return 'LargeHandler approved \$$amount';
    return super.handle(amount);
  }
}

// Usage
final chain = SmallHandler();
chain.setNext(LargeHandler());
print(chain.handle(50));   // SmallHandler approved $50
print(chain.handle(5000)); // LargeHandler approved $5000