Builder - Tensho97/Aprende-a-Aprender GitHub Wiki
Patrón Builder
Este patrón de creación significa que su uso esta ideado para construir objetos.
Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto, de tal forma que el mismo proceso de construcción pueda crear representaciones diferentes.
Las clases internas que participan en la construcción del objeto no forman parte del api público de Builder. El cliente no tiene por qué saber los detalles de cómo construir un objeto complejo. El uso de este patrón alivia la congestión de métodos con muchos parametros.
Ejemplo
En vez de tener este conjunto de constructores:
public Usuario(String email)
public Usuario(String email, String nombre, String apellidos)
public Usuario(String email, String telefono)
public Usuario(String email, String direccion)
public Usuario(String email, String nombre, String apellidos, String telefono)
public Usuario(String email, String nombre, String apellidos, String direccion)
public Usuario(String email, String telefono, String direccion)
public Usuario(String email, String nombre, String apellidos, String telefono, String direccion)
y tener que setear cada atributo
public Usuario()
public Usuario(String email)
public setEmail(String email)
public setNombre(String nombre, String apellidos)
public setTelefono(String telefono)
public setDireccion(String direccion)
Usaríamos el Patrón Builder:
- Cremos la clase de lña que deseamos despues hacer el Builder
public class Usuario {
private String email;
private String nombre;
private String apellidos;
private String telefono;
private String direccion;
private Usuario() {
}
Usuario(UsuarioBuilder builder) {
if (builder.getEmail() == null) {
throw new IllegalArgumentException("email es requerido");
}
this.email = builder.getEmail();
this.nombre = builder.getNombre();
this.apellidos = builder.getApellidos();
this.telefono = builder.getTelefono();
this.direccion = builder.getDireccion();
}
}
- Después creamos el Builder
public class UsuarioBuilder {
private String email;
private String nombre;
private String apellidos;
private String telefono;
private String direccion;
public UsuarioBuilder() {
}
public UsuarioBuilder email(String email) {
this.email = email;
return this;
}
public UsuarioBuilder nombre(String nombre, String apellidos) {
this.nombre = nombre;
this.apellidos = apellidos;
return this;
}
public UsuarioBuilder telefono(String telefono) {
this.telefono = telefono;
return this;
}
public UsuarioBuilder direccion(String direccion) {
this.direccion = direccion;
return this;
}
public Usuario build() {
return new Usuario(this);
}
// Getters
public String getEmail() {
return email;
};
public String getNombre() {
return nombre;
};
public String getApellidos() {
return apellidos;
};
public String getTelefono() {
return telefono;
};
public String getDireccion() {
return direccion;
};
}
Y nos quedaría a la hora de crear el Objeto algo así
public class Main {
public static void main(String[] args) {
Usuario usuario = new UsuarioBuilder()
.email("[email protected]")
.nombre("Nombre", "Apellido")
.telefono("555123456")
.direccion("c\\ Rue el Percebe 13").build();
}
}
Autor : Vanesa , Julián