# Builder Design Pattern

**Fuente**

<https://www.baeldung.com/creational-design-patterns>

* Se usa cuando la creación de un objeto es compleja.
* El patrón permite usar otro objeto Builder para construir el objeto.
* Defines una clase dentro de entity con los atributos
* Creas métodos Builder para cada atributo

![](https://463339025-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lc1Wg6TwhQzVvm_6lSV%2F-Lc1WhdnteMH7m8rIS2L%2F-Lc1WtMWYTVIblMdMz1L%2Fpatron.png?generation=1554820612663410\&alt=media)

## Implementacion

```java
 Persona persona = new Persona.Builder()
                .withCedula("7-7-7")
                .withNombre("Aristides")
                .withEdad(5)
                .build();
```

## Crear la clase con Builder dentro del beans

```java
public class Persona {

    private String cedula;
    private String nombre;
    private Integer edad;

    public Persona() {
    }

    public Persona(String cedula, String nombre, Integer edad) {
        this.cedula = cedula;
        this.nombre = nombre;
        this.edad = edad;
    }

    public static class Builder {

        private String cedula;
        private String nombre;
        private Integer edad;

        public Builder withCedula(String cedula) {
            this.cedula = cedula;
            return this;
        }
        public Builder withNombre(String nombre) {
            this.nombre = nombre;
            return this;
        }

        public Builder withEdad(Integer edad) {
            this.edad = edad;
            return this;
        }

        public Persona build() {
            return new Persona(cedula, nombre, edad);
        }

    }

}
```
