Wiele Builder Pattern
przykładów tworzy Builder
wewnętrzną klasę obiektu, który buduje.
Ma to jakiś sens, ponieważ wskazuje, co Builder
buduje. Jednak w języku typowanym statycznie wiemy, co się Builder
kompiluje.
Z drugiej strony, jeśli Builder
jest to klasa wewnętrzna, powinieneś wiedzieć, jaką klasę Builder
buduje, 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 Builder
jest w tym samym pakiecie, ale nie w wewnętrznej klasie StringBuilder
. Wiesz, że Builder
powinien zbudować a, String
ponieważ 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, Builder
nie znając jej nazwy ani nie polegając na konwencjach nazewnictwa. Na przykład, jeśli byłaby to StringBuilder
klasa wewnętrzna String
, prawdopodobnie wiedziałbym, że istniał wcześniej niż ja (spekulacyjne).
Czy istnieją inne powody, aby uczynić Builder
klasę wewnętrzną, czy sprowadza się to do preferencji i rytuału?
źródło
W tym przypadku nie ma „powinien”. Definiowanie konstruktora w innej klasie lub oddzielanie go jest prostopadłe do wzorca konstruktora. Wiele przykładów robi to ze względu na wygodę prezentacji kodu w jednym spójnym pliku (również w celu uzyskania dostępu do członków prywatnych, ale zależy to również od kontekstu). Możesz zrobić inaczej
źródło