El Patrón Estructural Bridge tiene como objetivo desacoplar una abstracción de su implementación, de manera que ambas puedan ser modificadas independientemente sin necesidad de alterar por ello la otra.
La herencia permite que una abstracción tenga varias implementaciones, esta relación se define en tiempo de compilación; Se desacopla una abstracción de su implementación para que puedan variar independientemente.
Características generales de este patrón:
Nombre:
Bridge.
También conocido como:
Handle/Body.
Propósito:
Desacopla una abstracción de su implementación de manera que las dos puedan evolucionar independientemente.
Aplicabilidad:
Este patrón se utiliza generalmente cuando:
· Para evitar una vinculación permanente entre una abstracción y su implementación (Permite cambiar la implementación en tiempo de ejecución).
· Cuando tanto las abstracciones como las implementaciones podrían ser susceptibles de extensión mediante subclases (El patrón Bridge permite combinar las abstracciones e implementaciones y extenderlas independientemente, permite además reducir la proliferación de clases).
· Para que cambios en la implementación de una abstracción no hagan recompilar el código de los clientes.
· Para compartir una implementación entre múltiples objetos, sin que lo noten los clientes.
Estructura:

Participantes:
· Abstraction: Define una interfase abstracta, mantiene una referencia a un objeto de tipo Implementor.
· RefinedAbstraction: Extiende la interfase definida por Abstraction.
· Implementor: Define la interfase para la implementación de clases, esta interface no se tiene que corresponder exactamente con la interfase de Abstraction; de hecho, las dos interfaces pueden ser bastante diferente. Típicamente la interface Implementor provee sólo operaciones primitivas, y Abstraction define operaciones de alto nivel basadas en estas primitivas.
· ConcreteImplementor: Implementa la interfase de Implementor y define su implementación concreta.
Aplicabilidad:
Este patrón se utiliza generalmente cuando:
·
· Tanto las abstracciones como sus implementaciones deben ser extensibles por medio de subclases. En este caso, el patrón Bridge permite combinar abstracciones e implementaciones diferentes y extenderlas independientemente. Además que reduce la proliferación de clases.
· Cambios en la implementación de una abstracción no deben impactar en los clientes, es decir, su código no debe tener que ser recompilado.
· Se desea compartir una implementación entre múltiples objetos (quizá usando contadores), y este hecho debe ser escondido a los clientes.
Consecuencias:
· Se desacopla interfaz e implementación: La implementación no está vinculada permanentemente a la interfaz, y se puede determinar en tiempo de ejecución (incluso cambiar), se eliminan dependencias de compilación, se consigue una arquitectura más estructurada en niveles.
· Se mejora la extensibilidad: Las jerarquías de abstracción y de implementación pueden evolucionar independientemente.
· Se esconden detalles de implementación a los clientes.
Patrones relacionados:
· Abstract Factory.
· Adapter.
Etiquetas: Bridge, Patrones Estructurales, Structural patterns