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