The bridge design pattern
Some applications can have multiple different implementations of a specific functionality. The implementations could be in the form of different algorithms or something do to with multiple platforms. The implementations tend to vary often and they could also have new implementations throughout the lifecycle of a program. Moreover, the implementations could be used in different ways for different abstractions. In cases like these, it is good to decouple things in our code, or else we are in danger of a class explosion.
Note
The purpose of the bridge design pattern is to decouple an abstraction from its implementation so that the two can vary independently.
The bridge design pattern is quite useful in the cases where the abstractions or the implementations could vary often and independently. If we directly implement an abstraction, variations to the abstraction or the implementations would always affect all other classes in the hierarchy. This makes it hard to extend...