Bridge

Decouple an abstraction from its implementation so that the two can vary independently.
(Closely related to the object form of the Adaper pattern.)
Applicability
- Need to avoid a permanent binding between an abstraction (type!) and its
implementation
- Both abstractions and implementation should be extensible through subclassing
- Need to isolate changes in implementations from clients
- Need to completely (.h files) hide implementation from clients
- Need to split objects because of prolifereation of classes ("nested generalizations")
Consequences
- Decouples interface and implementation
- Improves extensibility
- Hides implementation details from clients