Muchos Builder Pattern
ejemplos hacen de la Builder
clase interna del objeto que construye.
Esto tiene algún sentido ya que indica lo que Builder
compila. Sin embargo, en un lenguaje tipado estáticamente sabemos qué Builder
compila.
Por otro lado, si se Builder
trata de una clase interna, debe saber en qué clase se Builder
compila sin mirar dentro de la clase Builder
.
Además, tener el constructor como una clase interna reduce el número de importaciones, ya que puede ser referenciado por la clase externa, si eso le importa.
Y luego hay ejemplos prácticos donde el Builder
está en el mismo paquete, pero no una clase interna, como StringBuilder
. Usted sabe que Builder
debería construir un String
porque se llama así.
Dicho esto, la única buena razón por la que puedo pensar para hacer una Builder
clase interna es que sabes cuál es la clase Builder
sin saber su nombre o sin depender de las convenciones de nombres. Por ejemplo, si StringBuilder
fuera una clase interna de String
, probablemente habría sabido que existía antes que yo (especulativo).
¿Hay alguna otra razón para hacer de la Builder
clase interna o simplemente se reduce a preferencias y rituales?
fuente
No hay "debería" en este caso. Definir un generador dentro de otra clase o tenerlo separado es ortogonal al patrón del generador. Muchos ejemplos hacen esto debido a la conveniencia de presentar el código en un archivo consistente (también para acceder a miembros privados, pero eso también depende del contexto). Siéntase libre de hacer lo contrario
fuente