Junior
Quais são as vantagens do padrão de projeto Builder em comparação com um construtor comum?
sobes.tech IA
Resposta da IA
- Legibilidade do código: Permite criar objetos com um grande número de parâmetros opcionais, tornando o processo de inicialização mais explícito e compreensível.
- Flexibilidade: Simplifica a gestão de parâmetros opcionais e suas combinações.
- Segurança: Garante que o objeto só será criado após definir todos os parâmetros necessários, evitando estados inválidos.
- Evitar construtores telescópicos: Resolve o problema do crescimento do número de construtores à medida que aumentam os parâmetros.
Exemplo:
// Classe com Builder
public class User {
private final String firstName;
private final String lastName;
private final int age; // Opcional
private User(Builder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
}
public static class Builder {
private final String firstName;
private final String lastName;
private int age;
public Builder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public Builder age(int age) {
this.age = age;
return this;
}
public User build() {
// Verificação de parâmetros obrigatórios
if (firstName == null || lastName == null) {
throw new IllegalStateException("Primeiro nome e sobrenome são obrigatórios.");
}
return new User(this);
}
}
// Getters...
}
// Uso do Builder
User user = new User.Builder("Иван", "Петров")
.age(30)
.build();
// Comparação com construtor comum (sem Builder)
// A versão com mais parâmetros opcionais requer múltiplos construtores ou passar null