Patrón Bridge

PUBLICADO: 2026-08-16
AUTOR: MANUEL PRIETO
Patrones de Diseño

💡 Ver Caso Práctico: Ejemplo Práctico del Patrón Bridge

Bridge (Puente) es un patrón de diseño estructural que divide una clase grande, o un grupo de clases estrechamente relacionadas, en dos jerarquías separadas —abstracción e implementación— que pueden desarrollarse independientemente.

Propósito y Caso de Uso

Utiliza Bridge cuando tengas una abstracción que puede tener varias implementaciones (ej. una notificación que puede enviarse por Email, SMS o Push) y quieras evitar una explosión combinatoria de subclases (UrgentEmailNotification, UrgentSmsNotification, NormalEmailNotification...). A diferencia del Patrón Adapter, que se aplica después de que el diseño ya existe para hacer compatibles interfaces incompatibles, Bridge se diseña de antemano para permitir que dos jerarquías evolucionen por separado.

Estructura del Patrón

  1. Abstracción: Define la interfaz de alto nivel y mantiene una referencia a un objeto Implementador.
  2. Abstracción Refinada: Extiende la abstracción con variantes (ej. UrgentNotification).
  3. Implementador: Interfaz común para todas las implementaciones concretas.
  4. Implementadores Concretos: Cada variante técnica (EmailSender, SmsSender).
Cargando diagrama...

Flujo de Funcionamiento

  1. Composición, no herencia: La abstracción no hereda de la implementación, la contiene como campo.
  2. Delegación: Cada llamada de alto nivel (notification.send()) delega en el método del implementador inyectado.
  3. Combinación libre: Cualquier abstracción refinada funciona con cualquier implementador concreto, sin subclases cruzadas.

Ejemplos de Implementación Reales

Cuándo NO usarlo

Si solo existe una implementación posible y no se prevé que cambie, Bridge introduce una capa de indirección sin beneficio real (YAGNIGlosarioYAGNI (You Aren't Gonna Need It)Principio de Extreme Programming (XP) que establece que un programador no debe añadir funcionalidad hasta que sea estrictamente necesario. Su objetivo es evitar la sobre-ingeniería (over-engineering), previniendo código para funcionalidades hipotéticas.Ver término completo →).