Proszę ponownie rozważyć. NIE chcesz używać tutaj singletonów. Udostępniasz niektóre funkcje użytkownikom, którzy pochodzą z Twojej klasy. W porządku. Ale ty także dyktujesz jeden konkretny sposób, w jaki musi być zawsze użyty i bez żadnego powodu. To nie jest dobre.
Może być sensowne tworzenie tylko jednego obiektu tej klasy przez większość czasu, ale w takim przypadku, wystarczy po prostu utworzyć obiekt raz. To nie jest tak, że możesz przypadkowo utworzyć tuzin obiektów bez zauważenia. Co więcej, jak można stwierdzić, że posiadanie dwóch instancji będzie przydatne? Mogę myśleć o kilku przypadkach nawet teraz.
Testowanie jednostki: Możesz chcieć każdy test, aby utworzyć instancję tego obiektu, i później go odłożyć. A ponieważ większość ludzi ma więcej niż jeden test jednostkowy, musisz go utworzyć więcej niż raz.
Lub możesz w pewnym momencie zdecydować, że będziesz mieć wiele identycznych/podobnych poziomów w grze, co oznacza tworzenie wielu instancji.
Singleton daje dwie rzeczy:
- gwarancja, że nie więcej niż jedna instancja obiektu będzie kiedykolwiek instancji, a
- Globalny dostęp do tej instancji
jeśli nie potrzebuję obu tych rzeczy, są lepsze alternatywy. Z pewnością nie potrzebujesz globalnego dostępu. (globale są złe i zwykle są oznaką złego projektu, szczególnie w zmiennych danych, takich jak stan gry)
Ale nie potrzebujesz gwarancji, że nie uda się utworzyć więcej niż jednego wystąpienia. Czy to koniec świata, jeśli tworzę obiekt dwukrotnie? Czy aplikacja się zawiesi? Jeśli tak, potrzebujesz tej gwarancji. Ale w twoim przypadku nic złego się nie stanie. Osoba tworząca obiekt po prostu zużywa więcej pamięci niż to konieczne. Ale może mieć powód.
Po prostu dołącz do dokumentacji klasowej, że jest to bardzo duża i droga klasa, i nie powinieneś tworzyć jej częściej niż to konieczne. Problem rozwiązany. Nie usuniesz elastyczności, która może się później przydać, nie zapewniasz globalnego dostępu do danych bez powodu. Ponieważ można kontrolować, kto może zobaczyć obiekt, nie trzeba go utopić w blokadach, które staną się wąskim gardłem w aplikacjach wielowątkowych. Nie masz ukrytych zależności rozproszonych w kodzie, co utrudnia testowanie i trudniejsze do ponownego użycia.
Przez pewien czas byłem na ogrodzeniu w odniesieniu do singletonów. Ale ten wątek ma kilka zalet, ponieważ nie używają go: http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons – JMD
Istnieją setki wątków, postów na blogach i artykułów pełnych powodów używać singletonów. Niezwykle rzadko udoskonalają swój kod. Proszę to przemyśleć. Ty i każdy inny programista pracujący z tym kodem będzie żałował tynkowania singletonów wszędzie. – jalf