Bridge

Bridge: split abstraction from implementation

Problem: two dimensions vary independently. If you subclass for every combination you get a class explosion.

PawWalk scenario: a Notification (the what β€” reminder, receipt) holds a Transport (the how β€” SMS, email). Add a new transport OR a new notification type without touching the other axis.

The bridge is just composition: the abstraction holds a reference to the implementation and delegates the varying part to it.