Builder
Permite producir diferentes tipos y representaciones de un objeto utilizando el mismo proceso de construcción. El builder permite construir objetos complejos paso a paso. Ayuda a que el código sea más legible. Y evita usar constructores, los cuales afectan a muchas clases cuando se cambia su firma. También encapsula lógica especifica de construcción del objeto, abstrayendo al usuario de este conocimiento.
Ejemplo de uso:
Person person = Person.builder()
.firstName("Nikola")
.lastName("Tesla")
.build();
System.out.println(person);