Muitos Builder Patternexemplos compõem a Builderclasse interna do objeto que ele constrói.
Isso faz algum sentido, pois indica o que as Buildercompilações. No entanto, em uma linguagem de tipo estaticamente, sabemos o que é Builderconstruído.
Por outro lado, se Builderfor uma classe interna, você deve saber qual classe a Buildercompilação sem olhar para dentro da Builder.
Além disso, ter o construtor como uma classe interna reduz o número de importações, pois ele pode ser referenciado pela classe externa - se você se importa com isso.
E há exemplos práticos em que o Builderestá no mesmo pacote, mas não em uma classe interna, como StringBuilder. Você sabe que o Builder deve criar um Stringporque é assim chamado.
Dito isto, a única boa razão para pensar em fazer uma Builderclasse interna é que você sabe o que é a classe Buildersem saber seu nome ou depender de convenções de nomenclatura. Por exemplo, se StringBuilderfosse uma classe interna de Stringeu provavelmente saberia que existia mais cedo do que existia (especulativo).
Existem outras razões para fazer da Builderclasse uma parte interna ou se resume apenas à preferência e ao ritual?