Generalidades

Patrones de diseño estructural en Kotlin: Patrones de puentes de Deepak Singh Gahlot | Abril de 2022

El modo puente es muy similar al adaptador, la principal diferencia es que el puente funciona con código nuevo, mientras que el adaptador funciona con código antiguo.

Lea sobre el patrón del adaptador aquí

Patrones de diseno estructural en Kotlin Patrones de puentes de
Foto de Valentino Funghi en Unsplash

Los conceptos giran en torno a por qué elegiría el patrón de puente o es para desacoplar la abstracción y la implementación.

encapsulación, composición, herencia Un concepto del patrón de puente y por qué no es solo herencia es Los cambios en la abstracción no afectan a los clientes Esto significa que el cliente desconoce la abstracción del backend. Esto es importante porque separa la implementación del contrato o la interfaz que utiliza el cliente.

Una razón clave para elegir este modo es que sabemos que los detalles son incorrectos al principio, lo que puede sonar un poco extraño, pero el puente nos permite agregar niveles de dirección a nuestra aplicación.

Si no está seguro de cuál es el producto final que está construyendo, Bridge es excelente para brindarnos flexibilidad sin romper las cosas al cambiar.

diseño

El diseño de Bridge es más complejo que el de Adapter. Utilizará interfaces y clases abstractas. También enfatiza la composición sobre la herencia. Pero no se trata sólo de composición.

Su aplicación está diseñada para esperar cambios en ambos lados.

Supongamos que tenemos una clase House con varias subclases WoodHouse y RockHouse. Hasta aquí todo bien, pero ahora queremos colorearlos y crear una casa amarilla y una casa roja. Para nuestra subclase actual, necesitamos crear cuatro combinaciones de subclases, que son YellowWoodHouse, YellowRockHouse, RedWoodHouse y RedRock house.

Patrones de diseno estructural en Kotlin Patrones de puentes de

Agregar dos subclases más que necesitan crear una combinación y agregar un nuevo tipo de casa de otro color significa crear tres subclases para cada tipo de casa. La jerarquía crecerá exponencialmente y solo empeorará.

Entonces, el problema que heredamos de la clase House va en dos direcciones, tipo y color, y estas propiedades son independientes entre sí.este puente Los esquemas pueden ayudar al extraer estas dos propiedades en dos jerarquías de clases diferentes. Esto significa que la abstracción de la Casa estará en una jerarquía de clases separada, y los Colores estarán en otra jerarquía de clases separada, y usarán la composición para conectar estas jerarquías separadas.

1650020302 118 Patrones de diseno estructural en Kotlin Patrones de puentes de

Ahora podemos agregar o cambiar cualquier tipo de casa sin afectar la jerarquía de clases de color, y también agregar más colores sin afectar la abstracción de la casa y su jerarquía de clases.Entonces, lo que estamos haciendo aquí es separar o desacoplar la abstracción, es decir, casa Desde su implementación es color De esta manera, los dos pueden cambiar independientemente sin afectarse mutuamente, lo cual es puente patrón.

Ahora veamos cómo puente Los patrones se implementan en código usando Kotlin.

Aquí tenemos la interfaz. color y dos implementaciones de clases concretas color interfaz.

interface Color {
fun getColor()
}
class Yellow: Color {
override fun getColor() {
println("Yellow")
}
}
class Red: Color {
override fun getColor() {
println("Red")
}
}

Aquí tenemos casa interfaz, puede notar que House se refiere al implementador color Como se mencionó anteriormente.

interface House {
val color: Color
fun show()
}
class WoodHouse(override val color: Color): House {
override fun show() {
print("The wood house color is ")
color.getColor()
}
}
class RockHouse(override val color: Color): House {
override fun show() {
print("The rock house color is ")
color.getColor()
}
}

El uso es el siguiente

fun main() {
val yellowWoodHouse = WoodHouse(color = Yellow())
yellowWoodHouse.show()
val yellowRockHouse = RockHouse(color = Yellow())
yellowRockHouse.show()
val redWoodHouse = WoodHouse(color = Red())
redWoodHouse.show()
val redRockHouse = RockHouse(color = Red())
redRockHouse.show()
}
  • Cualquier cambio en la implementación no debería afectar la abstracción.
  • Enlaces de tiempo de ejecución que su programa necesita implementar.
  • Desea compartir una implementación entre varios objetos.
  • Cuando desee dividir y organizar una clase general con múltiples variantes de alguna funcionalidad (por ejemplo, si la clase debe usarse con varios servidores de bases de datos).
  • Cuando tiene que desarrollar un módulo que puede tener algunas propiedades o comportamiento heredado y algo dinámico.
  • Desacople la interfaz de un objeto y hágalo independiente.
  • Extensibilidad mejorada (puede ampliar (subclase) las jerarquías de abstracción e implementación de forma independiente).
  • Proporciona una buena solución para el desarrollo multiplataforma.
  • Modo Puente Cambie los elementos de abstracción e implementación de una clase de forma independiente mediante la creación de dos jerarquías de clases separadas, mientras que modo adaptador Ayuda a dos clases incompatibles a trabajar juntas.
  • Además, como dice GOF, «El adaptador puede funcionar una vez diseñado; en la otra mano Bridge les hace trabajar antes que ellos. » . significa modo adaptador Normalmente se usa con una aplicación ya desarrollada para hacer que dos clases incompatibles funcionen juntas.Sin embargo Modo Puente Por lo general, está prediseñado para permitir a los desarrolladores desarrollar una parte de la aplicación y tener otras partes escritas por alguien de forma independiente.
  • puentes, estados, políticas(hasta cierto punto adaptador) tiene una estructura muy similar (basada en «trabaja») para delegar trabajo a otros objetos. Sin embargo, todos tienen como objetivo resolver problemas diferentes.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba