Bridge - Patrones de Diseño

A
Antonio Leiva
3 min lectura

El patrón de diseño Bridge es un patrón estructural que permite separar la implementación de una clase de su interfaz, de modo que ambos puedan variar de forma independiente.

Esto permite una mayor flexibilidad y reutilización del código, y es muy útil cuando se trabaja con clases que tienen muchas variantes y que pueden ser combinadas de diferentes maneras.

En Kotlin, el patrón Bridge se implementa mediante la creación de una interfaz que define la funcionalidad de la clase, y una clase abstracta que implementa dicha interfaz y que contiene una referencia a un objeto de otra clase que implementa la implementación concreta de la funcionalidad.

Esto se ilustra en el siguiente ejemplo:

interface DrawAPI {
    fun drawCircle(radius: Int, x: Int, y: Int)
}

abstract class Shape(val drawAPI: DrawAPI) {
    abstract fun draw()
}

class Circle(x: Int, y: Int, radius: Int, drawAPI: DrawAPI) : Shape(drawAPI) {
    override fun draw() {
        drawAPI.drawCircle(radius, x, y)
    }
}

En este ejemplo, la interfaz DrawAPI define la funcionalidad para dibujar un círculo, y la clase abstracta Shape contiene una referencia a un objeto que implementa esta interfaz. La clase concreta Circle hereda de Shape y utiliza su referencia a DrawAPI para dibujar un círculo en pantalla.

Esto permite que diferentes implementaciones de DrawAPI puedan ser utilizadas para dibujar círculos de diferentes maneras, como por ejemplo utilizando diferentes librerías gráficas o incluso utilizando diferentes medios como un canvas en una aplicación web o una superficie en una aplicación de escritorio.

class CanvasDrawAPI : DrawAPI {
    override fun drawCircle(radius: Int, x: Int, y: Int) {
        // Dibuja un círculo en un canvas
    }
}

class SurfaceDrawAPI : DrawAPI {
    override fun drawCircle(radius: Int, x: Int, y: Int) {
        // Dibuja un círculo en una superficie
    }
}

De esta forma, el patrón Bridge permite separar la lógica de la clase Shape de la implementación concreta de cómo se dibuja un círculo, lo que facilita la reutilización y extensión del código.

Por ejemplo, podríamos agregar una nueva clase Square que utilice la misma interfaz DrawAPI y la misma clase abstracta Shape para dibujar un cuadrado en lugar de un círculo, sin necesidad de modificar el código existente.

class Square(x: Int, y: Int, side: Int, drawAPI: DrawAPI) : Shape(drawAPI) {
    override fun draw() {
        drawAPI.drawSquare(side, x, y)
    }
}

En resumen, el patrón Bridge es una herramienta muy útil en la programación orientada a objetos, ya que permite separar la implementación de una clase de su interfaz, lo que facilita la reutilización y extensión del código.

En Kotlin, se puede implementar mediante la creación de una interfaz que define la funcionalidad de la clase y una clase abstracta que contiene una referencia a un objeto que implementa dicha interfaz.