Olá, Diogo.
Tudo bem?
À primeira vista, pode parecer que estamos apenas adicionando uma camada de complexidade desnecessária. No entanto, o padrão de fábrica oferece algumas vantagens importantes, especialmente em projetos mais complexos. Vamos explorar alguns desses benefícios:
Abstração da Criação de Objetos:
- Ao usar uma fábrica, você encapsula a lógica de criação do objeto em um único lugar. Isso significa que, se a lógica de criação mudar (por exemplo, se novos parâmetros forem adicionados ao construtor), você só precisa atualizar a fábrica, e não todas as partes do código onde o objeto é instanciado.
- Exemplo: Se a classe
Usuario
passar a exigir um novo parâmetro no construtor, você só precisa atualizar a FabricaDeUsuario
e não todas as instâncias de new Usuario()
espalhadas pelo código.
Legibilidade e Manutenção:
- Métodos de fábrica podem ter nomes descritivos que tornam o código mais legível. Em vez de ter
new Usuario(cpf, nome, nascimento, email)
, você pode ter fabricaUsuario.comNomeCpfNascimento(nome, cpf, nascimento)
, que é mais intuitivo. - Exemplo:
Usuario usuario = fabricaUsuario.comNomeCpfNascimento("João", "12345678900", LocalDate.of(1990, 1, 1));
Facilidade de Testes:
- A fábrica pode ser facilmente mockada em testes, permitindo que você controle a criação de objetos e isole o comportamento que está sendo testado.
- Exemplo: Em um teste, você pode substituir a fábrica real por uma fábrica mockada que retorna objetos pré-configurados.
Flexibilidade e Extensibilidade:
- A fábrica permite adicionar novas formas de criar objetos sem modificar o código existente. Você pode adicionar novos métodos na fábrica para diferentes formas de criação.
- Exemplo:
public Usuario comNomeCpfNascimentoEEmail(String nome, String cpf, LocalDate nascimento, String email)
Sobre o uso de setters, o padrão de fábrica também ajuda a evitar o uso excessivo de setters, promovendo a imutabilidade e a consistência do objeto. Ao criar o objeto de forma completa e consistente na fábrica, você minimiza o risco de ter objetos em estados inválidos.
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.