## Bridge Decouple an abstraction from its implementation so that the two can vary independently. ### When to use * you want to avoid a permanent binding between an abstraction and its implementation * both the abstractions and their implementations should be extensible by subclassing * changes in the implementation of an abstraction should have no impact on clients * you want to hide the implementation of an abstraction completely from clients