Niedawno kodowałem przy pomocy API Bukkit, jednak moje pytanie nie jest bezpośrednio z nim związane.Przekazywanie instancji przez konstruktory lub uzyskiwanie do niej dostępu statycznego?
W interfejsie API Bukkit można mieć jedną instancję klasy głównej (new MainClass()
podaje błąd), więc zastanawiałem się, czy lepiej dla mnie przekazać główną klasę do wszystkich moich klas przy użyciu konstruktora, LUB czy powinienem po prostu użyć statycznej metody, która zwraca instancję (MainClass.getInstance()
)
Jestem ciekawy, który z nich jest lepszy (pod względem wydajności i praktyki).
Powinieneś [przekazać] (https://en.m.wikipedia.org/wiki/Dependency_injection), ale powinieneś [przekazywać tylko to, co jest potrzebne] (https://en.m.wikipedia.org/wiki/Law_of_Demeter) zamiast przekazywać swój "główny" obiekt do wszystkich innych instancji, a następnie wywoływanie tych instancji w wewnętrznych obiektach głównego obiektu. –
@VinceEmigh Lepiej wdrożyć singleton? –
@SureshAtta To wprowadziłoby stan globalny, który sprawia, że kod jest trudniejszy do sprawdzenia (https://softwareengineering.stackexchange.com/questions/148108/why-is-global-state-so-evil). Byłoby to nadużyciem wzorca (dlatego jest teraz [uważane za anty-wzór] (https://stackoverflow.com/questions/12755539/why-is-singleton-considered-an-anti-pattern)). [Zalecaną alternatywą będzie DI] (https://stackoverflow.com/questions/1300655/whats-alternative-to-singleton), a konkretnie przekazanie tylko tego, co jest potrzebne (a nie samego samego) do zmniejszenia ekspozycji –