Design Patterns in Go
  • Portada
  • Introducción
  • Publicación
  • Parte I
    • Sobre Go
    • POO en Go
      • Objetos
      • Herencia / Composición
      • S.O.L.I.D
  • Parte II
    • Patrones de Diseño
      • GoF
      • Patrones de Comportamiento
        • Strategy
        • Chain of Responsibility
        • Command
        • Template Method
        • Memento
        • Interpreter
        • Iterator
        • Visitor
        • State
        • Mediator
        • Observer
      • Patrones Creacionales
        • Singleton
        • Builder
        • Factory Method
        • Abstract Factory
        • Prototype
      • Patrones Estructurales
        • Composite
        • Adapter
        • Bridge
        • Proxy
        • Decorator
        • Facade
        • Flyweight
  • Parte III
    • Conclusiones
    • Acerca De
  • Recursos de interés
  • Glosario
Con tecnología de GitBook
En esta página
  • Propósito
  • También conocido como
  • Estructura
  • Participantes
  • Implementación
  • Código de ejemplo

¿Te fue útil?

  1. Parte II
  2. Patrones de Diseño
  3. Patrones Estructurales

Bridge

AnteriorAdapterSiguienteProxy

Última actualización hace 5 años

¿Te fue útil?

Propósito

Según el libro "Patrones de Diseño" el patrón Bridge "desacopla una abstracción de su implementación, de modo que ambas puedan variar de forma independiente".

También conocido como

Handle/Body (Manejador/Cuerpo)

Estructura

Participantes

  • Abstraccion:

    • define la interfaz de la abstracción.

    • mantiene una referencia a una variable de tipo Implementador.

  • AbstraccionRefinada:

    • extiende la interfaz definida por Abstraccion.

  • Implementador:

    • define la interfaz de los tipos de datos de implementación. Esta interfaz no tiene por qué corresponderse exactamente con la de Abstracción; de hecho, ambas interfaces pueden ser muy distintas. Normalmente la interfaz Implementador solo proporciona operaciones primitivas, y Abstraccion define operaciones de más alto nivel basadas en dichas primitivas.

  • ImplementadorConcreto:

    • implementa la interfaz Implementador y define su implementación concreta.

Implementación

  • No se observan impedimentos para su implementación en Go.

  • En este caso, dado que Abstraccion se define como una interface pero a la vez también implementando comportamiento concreto para mantener la referencia del tipo de dato Implementador, se separará en dos partes en dos partes: a) por un lado los comportamientos abstractos deben definirse en una interface Abstraccion Interface, y b) por otro lado los comportamientos concretos (el que mantiene una referencia del Implementador) dentro de un tipo de dato Abstraccion Abstracta.

  • Las Abstracciones Refinadas se componen (en vez de heredar) de Abstraccion Abstracta.

Código de ejemplo

En este ejemplo queremos desacoplar el protocolo de conexión a internet que pueden implementar distintos dispositivos.

Implementación:

// Abstraccion Interface
type DispositivoInterface interface {
    ConectarInternet() string
    SetConexion(Conexion)
}

// Abstraccion Abstracta
type Dispositivo struct {
    conexion Conexion
}

func (d *Dispositivo) SetConexion(conexion Conexion) {
    d.conexion = conexion
}

// Abstraccion Refinada
type Telefono struct {
    numero string
    *Dispositivo
}

func (t *Telefono) ConectarInternet() string {
    return "Teléfono N° " + t.numero + " conectado a internet mediante " + t.conexion.Conectar()
}

// Abstraccion Refinada
type Tablet struct {
    *Dispositivo
}

func (t *Tablet) ConectarInternet() string {
    return "Tablet conectada a internet mediante " + t.conexion.Conectar()
}

// Implementador Interface
type Conexion interface {
    Conectar() string
}

// Implementador Concreto
type Red4G struct{}

func (r *Red4G) Conectar() string {
    return "4G"
}

// Implementador Concreto
type RedWiFi struct{}

func (r *RedWiFi) Conectar() string {
    return "WiFi"
}

Se puede probar la implementación del patrón de la siguiente forma:

telefonoA := &Telefono{"0115161", &Dispositivo{}}
telefonoA.SetConexion(&Red4G{})
fmt.Printf("%s\n", telefonoA.ConectarInternet())

telefonoB := &Telefono{"0117854", &Dispositivo{}}
telefonoB.SetConexion(&RedWiFi{})
fmt.Printf("%s\n", telefonoB.ConectarInternet())

tablet := &Tablet{&Dispositivo{}}
tablet.SetConexion(&RedWiFi{})
fmt.Printf("%s\n", tablet.ConectarInternet())

|

Atención: Esta publicación se encuentra abandonada. Puede acceder a la versión vigente en

Código de ejemplo
Ejecutar código
https://leanpub.com/designpatternsingo
[29]