Sobes.tech
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