Builder – Patrones de Diseño
Antonio Leiva

El patrón de diseño Builder es un patrón de creación que permite construir objetos complejos de manera sencilla y organizada.

Este patrón se utiliza cuando tenemos una clase con una gran cantidad de parámetros, y queremos crear una interfaz clara y fácil de usar para construir objetos de esa clase.

En Kotlin, podemos implementar el patrón Builder mediante una clase interna que se encarga de construir el objeto y una clase externa que contiene los métodos de construcción.

Ejemplo del patrón Builder

Por ejemplo, supongamos que tenemos una clase Pizza que tiene varios parámetros, como el tamaño, el tipo de masa, los ingredientes y el precio.

Podemos implementar el patrón Builder para construir objetos de esta clase de la siguiente manera:

class Pizza {
    var size: String? = null
    var crust: String? = null
    var ingredients: List<String>? = null
    var price: Double? = null

    class Builder {
        private val pizza = Pizza()

        fun size(size: String) = apply { pizza.size = size }
        fun crust(crust: String) = apply { pizza.crust = crust }
        fun ingredients(vararg ingredients: String) = apply { pizza.ingredients = ingredients.toList() }
        fun price(price: Double) = apply { pizza.price = price }

        fun build() = pizza
    }
}

La clase Builder tiene una propiedad privada llamada pizza, que es una instancia de la clase Pizza. Los métodos size, crust, ingredients y price reciben sus respectivos parámetros y los establecen en el objeto pizza. El método build() devuelve el objeto pizza completamente construido.

Para utilizar el patrón Builder, podemos crear un objeto de la clase Pizza de la siguiente manera:

val pizza = Pizza.Builder()
    .size("medium")
    .crust("thick")
    .ingredients("cheese", "pepperoni", "mushrooms")
    .price(12.50)
    .build()

En este ejemplo, estamos construyendo un objeto de la clase Pizza con un tamaño mediano, masa gruesa, ingredientes queso, pepperoni y champiñones, y un precio de 12.50 dólares. El patrón Builder nos permite escribir código legible y organizado para crear objetos complejos.

¿Tiene sentido en Kotlin el patrón Builder, teniendo opciones como apply?

La realidad es que en Kotlin la función apply() hace las veces de Builder y prácticamente se puede usar de forma indistinta.

Pero en ocasiones nos puede interesar usar una implementación como la que hemos visto más arriba, si el código que se produce en cada función es lo suficientemente complejo.

Aún así, muchas veces también podrá sustituirse por sobrescrituras de los getters de las properties.

Pero el patrón Builder es muy popular en cualquier lenguaje, y usarlo puede ayudar a razonar sobre el código.

Conclusión

En resumen, el patrón Builder es un patrón de creación que nos permite construir objetos complejos de manera sencilla y organizada. En Kotlin, podemos implementar este patrón mediante una clase interna que se encarga de construir el obj

Quizá también te interese…

Las reglas FIRST de los tests

Las reglas FIRST de los tests

Las reglas FIRST son un conjunto de principios que se utilizan para diseñar y escribir tests de software de manera efectiva. Las siglas FIRST significan: F - Fast: Un test debe ser rápido de ejecutar. I - Independent: Un test debe ser independiente de otros tests y...

¿Qué son los dobles de test?

¿Qué son los dobles de test?

Los dobles de prueba (también conocidos como "doubles" o "fakes") son herramientas comunes en la programación y en particular en el testing de software. Se utilizan para simular el comportamiento de una dependencia de una aplicación en un entorno de pruebas, sin tener...

Kata del TicTacToe en Kotlin

Kata del TicTacToe en Kotlin

Escribe el código para representar una entidad que almacene el tablero de juego del 3 en raya, y que además tenga: Un método move() con 2 parámetros, fila y columna, que permita añadir un movimiento al tablero Un método findWinner(), que devuelva el ganador (X, Y o...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

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

Acepto la política de privacidad *