El patrón Bridge desacopla una abstracción de su implementación, de forma que
cada una de ellas pueda variar independientemente.
Aplicabilidad:
Participantes:
- Desacoplar abstracciones de sus implementaciones permitiendo el cambio en tiempo de ejecución.
- Necesidad de extender mediante herencia tanto la abstracción como sus implementaciones.
- El cambio en la implementación de una abstracción no debería afectar a los clientes.
- Necesidad de compartir una misma implementación.
Estructura:
En la siguiente imagen podemos ver un diagrama UML de este patrón:
Participantes:
- Abstracción: Define la interfaz de la abstracción y mantiene la referencia al objeto implementador.
- Abstracción refinada (AbstraccionRedefinida): Extiende la interfaz definida por la abstracción.
- Implementador: Define la interfaz para los implementadores concretos. Esta interfaz no tiene porque corresponderse con la interfaz de la abstracción: (Implementador->primitivas, Abstracción->operaciones de alto nivel).
- Implementador concreto (ImplementadorConcretoA, ImplementadorConcretoB): Implementa la interfaz Implementor definiendo una implementación concreta.
Colaboraciones:
La abstracción redirige peticiones del cliente al objeto implementador
La abstracción redirige peticiones del cliente al objeto implementador
Concecuencias:
- Desacoplamiento entre interfaz e implementación:
- Elimina dependencias de compilación.
- Posibilidad de configuración en tiempo de ejecución.
- Facilita el poder extender independientemente las jerarquías de abstracción e implementación.
- Oculta los detalles de implementación a los clientes.
Implementación:
- Único implementador.
- Creación del objeto implementador:
- Si la abstracción conoce la jerarquía de implementadotes, entonces, puede crear el implementador en el constructor en base a sus parámetros.
- Si la abstracción no conoce la jerarquía de implementadores entonces deberá delegar en otro objeto que se encargue de proporcionarle el implementador concreto, por ejemplo una Factoy.
- Compartición de implementadores.
Patrones relacionados:
- Abstract Factory: Permite crear y configurar un "Puente" particular
- Adapter: Tiene como objetivo hacer trabajar juntas a clases con distinta interfaces, pero en general, se aplica a sistemas que existen. El patrón Bridge se suele aplicar al empezar un diseño, para permitir que las abstracciones e implementadores evolucionen independientemente.