Bridge
Separates an abstraction from its implementation so the two can vary and evolve independently.
Why we need this / what value this brings
Avoids a combinatorial explosion of subclasses when both 'what it does' and 'how it does it' can vary independently.
When to use this
You have two dimensions of variation (e.g. notification type × delivery channel) that would otherwise multiply into one subclass per combination.
How to use or implement this
Define an abstraction that holds a reference to an implementation interface, and delegate the implementation-specific work to it, instead of subclassing the abstraction per implementation.
Research questions
- Notification delivery (booking-confirmed, review-requested, etc. × email/SMS/push) is a candidate: the message type and the channel it goes out on could vary independently instead of one class per combination.
Empty folder — drop notes, links, and findings here as you research.