Zasadne jest pytanie porównujące wzorzec Singleton (który, choć użyteczny, nie jest polecany jako remedium na wszystkie problemy, a nawet zaleca się jego unikanie w większości przypadków) oraz klasę statyczną. Pozornie obie te konstrukcje są do siebie na tyle podobne (w końcu obie występują w jednej instancji), że można się zastanawiać, dlaczego używać np. Singletona zamiast drugiego rozwiązania. Jest parę ważnych różnic: 1. Singleton cechuje się większym poziomem obiektowości aniżeli klasy statyczne. Bądź co bądź, Singleton jest klasą, jedynie z ograniczonym dostępem do jego elementów. 2. Przy Singletonie można lepiej kontrolować moment inicjalizacji pól. Dzieje się to przy stworzeniu instancji, a nie w momencie startu programu. 3. Obiekty Singletona można bez problemu przekazywać jako parametr w metodzie, co może niekiedy być przydatne. Natomiast do obu konstrukcji można się odwołać jak do zmiennej globalnej (a przynajmniej podobnie). 4. Minimalnie łatwiejsze jest przerobienie Singletona na standardową klasę, gdy zajdzie taka potrzeba - należy wówczas usunąć obiekt instancji, metodę getInstance oraz upublicznić konstuktor. Podobnie łatwo można przetransformować ideę posiadania jedynie jednego obiektu w ideę dotyczącą wielu obiektów, którymi żonglujemy. 5. Singleton może dziedziczyć po klasach i implementować interfejsy. Polecam również przejrzeć się następującym tekstom znalezionych w Internecie: http://www.pzielinski.com/?p=1137 http://forum.warsztat.gd/index.php?topic=21899.0