Bridge Pattern
Overview
Decouple an abstraction from its implementation so that the two can vary independently.
Participants
- defines the abstraction's interface.
- maintains a reference to an object of type Implementor.
- extends the interface defined by Abstraction.
- defines the interface for implementation classes. This interface doesn't have to
correspond exactly to the Abstraction's interface; in fact the two interfaces can be quite
different. Typically the Implementor interface provides only primitive operations, and
Abstraction defines high-level operations based on these primitives.
- implements the Implementor interface and defines its concrete implementation.
Parameters
-
when selected, will create special JavaDoc links in the code between pattern participants, describing
their relationships.
Applicability
Use the Bridge pattern when
- you want to avoid a permanent binding between an abstraction and its implementation.
This might be the case, for example, when the implementation must be selected or switched
at run-time.
- both the abstractions and their implementations should be extensible by subclassing.
In this case, the Bridge pattern lets you combine the different abstractions and
implementations and extend them independently.
- changes in the implementation of an abstraction should have no impact on clients; that
is, their code should not have to be recompiled.
- you have a proliferation of classes. Such a class hierarchy indicates the need for
splitting an object into two parts.
- you want to share an implementation among multiple objects (perhaps using
reference counting), and this fact should be hidden from the client.