Durante o curso de redação das diretrizes de código para uma empresa, me vi recomendando o uso do padrão Builder do Effective Java, em vez de construtores telescópicos.
No entanto, depois de pensar um pouco mais, certamente uma solução mais elegante é apenas remover a classe do construtor e também remover os construtores extras com argumentos opcionais.
Portanto, basta ter o construtor com os parâmetros necessários, getters / setters normais e comentar o código. Ao implementar, crie uma nova instância do objeto yr e defina os valores.
Meu pensamento original era o benefício de remover a confusão sobre quais parâmetros eram opcionais e quais eram necessários; no entanto, o verdadeiro benefício vem do uso do encadeamento de métodos / interface fluente.
O padrão do construtor possui benefícios quando você cria muitas novas instâncias, pois o ide pode fazer o trabalho da perna e também se houver muitos (15+) parâmetros opcionais. No entanto, vale a pena o tempo extra codificando a classe interna estática, você recomendaria usar o construtor ou é uma perda de tempo?
Respostas:
Costumo seguir um padrão em que os construtores devem fornecer todos os valores obrigatórios necessários para criar um objeto válido e consistente . Para valores opcionais, tento pensar sobre qual deve ser o padrão mais comum, para que os setters sejam usados o mínimo possível.
Se eu achar que existem muitos valores opcionais ou que uma proporção maior de valores opcionais tende a ser alterada em relação aos padrões, utilizarei o padrão do construtor (construtor interno estático ou outro design semelhante).
Josh geralmente dá conselhos muito bons - a melhor coisa que eu gosto nele é que os conselhos vêm das trincheiras - ele se admite que cometeu erros ao projetar partes de Java, e Java eficaz é em parte o tipo de sua 'cura' para falar :-)
fonte
O padrão Builder de Josh Bloch, como o GoF Builder Pattern, oferece uma maneira de criar um objeto imutável com muitos dados padrão sem longas listas de construtores encadeados.
Se você "tiver o único construtor com os parâmetros necessários, getters / setters normais", seu objeto não será mais imutável. ie Você pode alterá-lo muito tempo depois de instanciar.
Se isso não for um problema para você, você nunca precisou do padrão Builder. Se for um problema, sua solução será falha.
fonte