Wiele Builder Patternprzykładów tworzy Builderwewnętrzną klasę obiektu, który buduje.
Ma to jakiś sens, ponieważ wskazuje, co Builderbuduje. Jednak w języku typowanym statycznie wiemy, co się Builderkompiluje.
Z drugiej strony, jeśli Builderjest to klasa wewnętrzna, powinieneś wiedzieć, jaką klasę Builderbuduje, nie zaglądając do wnętrza Builder.
Ponadto posiadanie konstruktora jako klasy wewnętrznej zmniejsza liczbę importów, ponieważ klasa zewnętrzna może do niego odwoływać - jeśli o to dbasz.
A potem są praktyczne przykłady, w których Builderjest w tym samym pakiecie, ale nie w wewnętrznej klasie StringBuilder. Wiesz, że Builder powinien zbudować a, Stringponieważ tak się nazywa.
To powiedziawszy, jedyny dobry powód, dla którego mogę wymyślić Builder stworzyć wewnętrzną klasę, jest to, że wiesz, czym jest klasa, Buildernie znając jej nazwy ani nie polegając na konwencjach nazewnictwa. Na przykład, jeśli byłaby to StringBuilderklasa wewnętrzna String, prawdopodobnie wiedziałbym, że istniał wcześniej niż ja (spekulacyjne).
Czy istnieją inne powody, aby uczynić Builderklasę wewnętrzną, czy sprowadza się to do preferencji i rytuału?