5. Bridge pattern
Applicability:
- Need to avoid a permanent binding between an
abstraction and implementation.
- When abstractions and implementations should be
extensible through subclassing.
- When implementation changes should not impact
clients.