Molti esempi di Builder Pattern rendono Builder una classe interna dell'oggetto che costruisce.
Questo ha senso dal momento che indica cosa costruisce Builder . Tuttavia, in un linguaggio tipizzato staticamente sappiamo quali build Builder .
D'altra parte se Builder è una classe interna, tu dovresti sapere quale classe la Builder costruisce 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 ci tieni.
E poi ci sono esempi pratici in cui Builder è nello stesso pacchetto, ma non una classe interna, come StringBuilder . Sai che Builder dovrebbe creare un String perché è stato chiamato così.
Detto questo, l'unica buona ragione per cui posso pensare di fare una Builder di una classe interna è che tu sai quale sia la classe ' Builder senza conoscere il suo nome o fare affidamento sulle convenzioni di denominazione. Ad esempio, se StringBuilder era una classe interna di String probabilmente avrei saputo che esisteva prima di quanto facevo io (speculativo).
Ci sono altri motivi per rendere la Builder una classe interiore o si riduce a preferenze e rituali?