Patrón de creación: constructor
Este artículo analiza cómo se pueden representar y construir objetos complejos sin acoplar las dos operaciones.

¿Qué es?
El patrón constructor reduce la cantidad de código necesario para crear objetos. Por lo tanto, si tiene que construir algo complejo, puede simplificar este proceso utilizando el patrón de construcción. Un objeto compuesto o agregado es lo que generalmente hace un constructor.
El patrón constructor encapsula el proceso de construcción de un objeto complejo, separando su representación de su construcción. Esto nos permite crear diferentes modelos con el mismo proceso de construcción. En lenguaje Java, esto significa crear objetos de otras clases que pueden compartir el mismo proceso de construcción.
Diagrama de clase
El diagrama de clases incluye las siguientes entidades:
- Constructor
- Constructor de hormigón
- Director
- Producto

Siguiendo con nuestro ejemplo de los aviones, digamos que la construcción de un avión implica tres pasos:
- la fabricación de la cabina
- entonces el motor
- y por ultimo las alas
Echemos un vistazo al código ahora. Primero, comenzaremos con la interfaz abstracta de nuestra AircraftBuilder
clase. A continuación, cada constructor contiene métodos que los constructores concretos pueden anular, dependiendo de si incluirán esa pieza en la variante del producto final que son responsables de construir.

Ahora implementaremos dos constructores de concreto, uno para F-16 y otro para Boeing-747.

Para simplificar, proporcionamos el esqueleto de los constructores y omitimos la implementación individual de cada método. No F16Builder
anula el buildBathrooms
método porque no hay baños en la cabina del F-16. El creador del Boeing 747 anula el método del baño ya que un Boeing 747 tiene baños para pasajeros.
La Director
clase es responsable de registrar el proceso o algoritmo requerido para crear un avión, como el orden específico en el que se fabrican las diferentes partes. El director es como un constructor de aviones. Los constructores le devuelven el producto terminado.

Tenga en cuenta que podemos pasar al constructor de nuestra elección y variar el producto de la aeronave (representación) para que sea un F-16 o un Boeing-747. En nuestro escenario, los constructores devuelven diferentes supertipos, pero este puede no ser el caso si devuelven productos que no son muy similares.
El cliente aplicará el patrón de esta forma:

La AircraftBuilder
interfaz oculta cómo se construye un avión. El cliente desconoce las clases F16Engine
y F16Cockpit
que se utilizan para crear los Boeing-747.
saltándose al director
El patrón Builder a menudo se usa sin el director. En su lugar, el cliente puede instanciar directamente el constructor e invocar los métodos necesarios para obtener un producto por sí mismo. Este es un antídoto común para los constructores telescópicos. Por ejemplo, imagine una clase con demasiados atributos, pero algunos de ellos se pueden configurar para que sean opcionales. En tal caso, puede invocar al constructor solo para establecer los atributos necesarios y crear un producto.
Otros ejemplos
- La API de Java expone una
StringBuilder
clase que no se ajusta estrictamente al patrón de construcción de GoF, pero todavía se puede considerar como un ejemplo de ello. La clase StringBuilder proporciona un método de adición que devuelve una nueva cadena agregando caracteres de la cadena original. - Otro ejemplo hipotético podría ser la creación de documentos de tipo pdf o HTML.

El método anterior puede aparecer en un código de cliente o servidor, y se pueden crear diferentes tipos de documentos pasando un diferente DocumentBuilder
al método. Podríamos derivar a HtmlDocumentBuilder
y a PdfDocumentBuilder
de la clase abstracta DocumentBuilder
.
Advertencias
Los patrones constructor y fábrica abstracta tienen objetivos similares, pero los abordan de manera diferente. Por ejemplo, el patrón constructor crea objetos paso a paso, mientras que la fábrica abstracta devuelve un objeto de una sola vez.