A common example of Bridge occurs in drivers. An application that uses a driver is an abstractionthe choice of driver determines what happens when the application runs. The interface between applications and drivers lets you vary either side independently. You can create new applications that use the drivers without changing the drivers. You can also add new drivers without changing existing applications. That is the intent of Bridge.
You may encounter abstractions that are not decoupled from their implementation but rather are arranged as an abstract class whose concrete subclasses provide various implementations. In such a case, you can apply Bridge if you want to factor the hierarchy along another line. Moving the implementations out lets each implementation become a new class that implements a standard interface. This lets you add new subclasses to the abstraction, regardless of which implementation of the interface you will use. This move also lets you add new implementations of the interface without affecting the abstraction hierarchy. The Bridge pattern decouples an abstraction from its implementation so that the two can vary independently.