Durante el curso de la escritura de las pautas de código para una empresa, me encontré recomendando usar el patrón Builder de Effective Java, en lugar de constructores telescópicos.
Sin embargo, después de pensarlo un poco más, seguramente una solución más elegante es simplemente eliminar la clase de generador y también eliminar los constructores adicionales con argumentos opcionales.
Por lo tanto, solo tiene un constructor con los parámetros requeridos, getters / setters normales y comente el código. Al implementar, simplemente cree una nueva instancia del objeto yr y luego establezca valores.
Mi pensamiento original era que el beneficio provenía de eliminar la confusión en cuanto a qué parámetros eran opcionales y qué se requerían; sin embargo, el verdadero beneficio proviene del uso del método de encadenamiento / interfaz fluida.
El patrón de construcción tiene beneficios cuando crea muchas instancias nuevas, ya que el ide puede hacer el trabajo de piernas y también si hay muchos (15+) parámetros opcionales. Sin embargo, ¿vale la pena el tiempo extra codificando la clase interna estática, recomendaría usar el constructor, o es una pérdida de tiempo?
Respuestas:
Tiendo a seguir un patrón según el cual los constructores deberían proporcionar todos los valores obligatorios necesarios para crear un objeto válido y coherente . Para los valores opcionales, trato de pensar cuál debería ser el valor predeterminado más común, para que los establecedores se usen lo menos posible.
Si encuentro que hay muchos valores opcionales o que una proporción mayor de valores opcionales tiende a ser alterada de sus valores predeterminados, entonces usaré el patrón del generador (generador interno estático u otro diseño similar).
Josh generalmente da muy buenos consejos: lo mejor que me gusta de él es que los consejos provienen de las trincheras: admite que cometió errores al diseñar partes de Java, y Java Efectivo es en parte una especie de 'cura' para hablar :-)
fuente
El patrón Builder de Josh Bloch, al igual que el patrón GoF Builder, ofrece una forma de crear un objeto inmutable con muchos datos predeterminados sin largas listas de constructores encadenados.
Si "tiene el único constructor con los parámetros necesarios, getters / setters normales", entonces su objeto ya no es inmutable. es decir. Puede cambiarlo mucho después de crear una instancia.
Si eso no es un problema para usted, entonces nunca necesitó el patrón Builder en primer lugar. Si es un problema, entonces su solución es defectuosa.
fuente