W większości zajęć z języków programowania wymyka się wiele z systemu typów. Chociaż klasa ze swoimi statycznymi metodami i zmiennymi jest obiektem, bardzo często nie może implementować interfejsu ani rozszerzać innych klas. Z tego powodu nie może być stosowany w sposób polimorficzny, ponieważ nie może być podtypem innego typu. Na przykład, jeśli masz interfejs IFooable
, który jest wymagany przez kilka sygnatur metod innych klas, obiekt klasy StaticFoo
nie może być używany zamiast IFooable
, podczas gdy FooSingleton.getInstance()
can (zakładając, FooSingleton
implementuje IFooable
).
Proszę zauważyć, że tak jak skomentowałem odpowiedź Heinziego, singleton jest wzorcem kontrolującym instancję. Zastępuje new Class()
się Class.getInstance()
, co daje autorowi Class
większą kontrolę nad przypadkach, które może wykorzystać w celu zapobiegania tworzenia zbędnych przypadkach. Singleton to po prostu bardzo szczególny przypadek wzorca fabrycznego i tak powinien być traktowany. Powszechne użycie sprawia, że jest to raczej szczególny przypadek rejestrów globalnych, co często kończy się błędem, ponieważ rejestry globalne nie powinny być używane tylko dla woli.
Jeśli planujesz zapewnić globalne funkcje pomocnicze, metody statyczne będą działać dobrze. Klasa nie będzie działać jako klasa, ale raczej jako przestrzeń nazw. Sugeruję, abyś zachował wysoką spójność, albo możesz skończyć z najdziwniejszymi problemami z połączeniem.
greetz
back2dos