Otro de los patrones de diseño de software utilizados por los desarrolladores de software es el patrón Constructor o Builder.

Este patrón de diseño creativo te permite construir objetos complejos paso a paso, produciendo diferentes tipos y representaciones de un objeto utilizando el mismo código de construcción.

¿Qué problema resuelve el patrón constructor?

Un problema típico, que resuelve el patrón constructor, sería uno que requiere una inicialización laboriosa y paso a paso de muchos campos y objetos anidados. En este caso tendrías un constructor con muchos parámetros, o parámetros dispersos por todo el código del cliente.

Por ejemplo, podrías tener un objeto Home con cuatro paredes y un suelo, una puerta y un techo. Sin embargo, si quisieras tener una casa (Home) más grande y con más luz, con un patio trasero y más ventanas, y otros accesorios típicos de la construcción de una casa, etc, etc… Tu constructor se volvería monstruoso, y además no necesitarías siempre la mayoría de los parámetros.

Si quisieras extender tu clase Home base en subclases acabarías teniendo un número considerable de subclases para cubrir todas las combinaciones de los parámetros, y si necesitaras un parámetro nuevo más compleja aún más, se harái la jerarquía.

La propuesta del Patrón Constructor es que extraigas el código de construcción del objeto de su propia clase y lo muevas a objetos separados: los constructores. Este patrón organiza la construcción de objetos en un conjunto de pasos. Por ejemplo buildWalls(), buildWindows(), etc…

De esta forma se ejecutan una serie de pasos en un objeto constructor, y no se necesita llamar a todos los pasos.

Clase Director

El patrón propone también una clase separada llamada director que define el orden en el que ejecutar los pasos de construcción. El constructor proporciona la implementación de esos pasos. Sin embargo, la clase de director no es estrictamente necesaria.

¿Cuándo usar el patrón Constructor (Builder)?

Podrías usar el patrón Constructor para deshacerte del llamado “constructor telescópico”. Uno que tenga demasiados parámetros opcionales.  Puedes utilizar este patrón cuando quieras que tu código pueda crear diferentes representaciones de algún producto. Además puedes utilizar el patrón Builder para construir árboles Compuestos u otros objetos complejos.

Pros y contras del patrón constructor

Los siguientes son algunos de los “pros y cons” de este patrón:

Pros

Contras

  • Puedes construir objetos paso a paso, aplazar los pasos de construcción o ejecutar pasos de forma recursiva

  • Puedes reutilizar el mismo código de construcción al crear varias representaciones de productos

  • Principio de responsabilidad única. (Puedes aislar el código de construcción complejo de la lógica de negocio del producto)

  • Aumenta la complejidad general del código, pues el patrón requiere la creación de varias clases nuevas 

“Show me the code”

Para que tengas una idea concreta, sobre el patrón constructor, puedes ver este ejemplo en PHP de refactoring.guru.

En el ejemplo del “mundo real” verás que la generación de consultas SQL es una de las mejores aplicaciones del patrón Builder.

En el ejemplo verás que la interfaz del constructor define los pasos comunes necesarios para construir una consulta SQL genérica, los constructores concretos implementan estos pasos devolviendo partes de consultas SQL que pueden ejecutarse en un motor de base de datos particular.

¿Utilizas el patrón Builder en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!

Fuente:

Compartir es construir