The bridge pattern is defined as 'The Bridge pattern decouples an abstraction from its implementation, so that the two can vary independently'. I get that abstraction here doesn't mean abstract class / interface, but its not clear as to what abstraction actually means. But some sources online imply this.
https://sourcemaking.com/design_patterns/bridge describes it as:
"Hardening of the software arteries" has occurred by using subclassing of an abstract base class to provide alternative implementations. This locks in compile-time binding between interface and implementation. The abstraction and implementation cannot be independently extended or composed.
It seems to suggest that an abstract class / interface should be decoupled from its implementations, which sounds odd. How else would you provide alternative implementations ? My understanding of bridge pattern is that it is a way to organise some functionality that varies in multiple independent dimensions, into multiple hierarchies for each dimension, instead of having an exponential number of variants. It also seems like a consequence of the two principles: (i) Code against an interface instead of concrete implementations and (ii) Encapsulate what varies.
Can someone please explain what the definition of bridge pattern as described in the GoF book means ? Am I missing something here, or is it just a poorly worded description ?