Molti Builder Patternesempi rendono la Builderclasse interna dell'oggetto che costruisce.
Questo ha un senso dal momento che indica quali sono le Builderbuild. Tuttavia, in un linguaggio tipicamente statico sappiamo quali sono le Builderbuild.
D'altra parte se si Buildertratta di una classe interna, dovresti sapere quale classe Buildercostruisce senza guardare all'interno di Builder.
Inoltre, avere il builder come classe interna riduce il numero di importazioni poiché può essere referenziato dalla classe esterna - se ti interessa.
E poi ci sono esempi pratici in cui il Builderè nello stesso pacchetto, ma non una classe interna, come StringBuilder. Sai che Builder dovrebbe creare un Stringperché è così chiamato.
Detto questo, l'unica buona ragione che mi viene in mente per creare una Builderclasse interiore è che sai qual è la classe Buildersenza conoscerne il nome o fare affidamento su convenzioni di denominazione. Ad esempio, se StringBuilderfosse stata una classe interiore Stringprobabilmente avrei saputo che esisteva prima di me (speculativo).
Ci sono altri motivi per creare Builderuna classe interiore o dipende solo dalle preferenze e dal rituale?