Das Problem ist auch, dass viele einfach einen falschen Sinn in Singletons sehen. Singletons sollten nicht dafür verwendet werden von jeder Position Zugriff auf eine Klasse zu haben, denn dann ist das Singleton wirklich nur eine globale Variable. Dafür brauche ich dann nicht einmal eine Singleton-Klasse, sondern erstelle einfach eine globale Variable und kann diese nach Belieben verwenden. Da das aber ja ganz offensichtlich böse ist, muss man Singletons verwenden. Denn da ist die globale Variable noch ein bisschen versteckter und der Design-Schnitzer nicht ganz so offensichtlich
Oftmals ist es dann auch so, dass lange nicht jede Klasse auf das Singleton zugreifen müsste, sondern nur ein paar vereinzelte, denen dann aber relativ aufwändig eine Referenz mitgeliefert werden müsste. Das umgeht man einfach, indem man Singletons verwendet, was schlichtweg der falsche Ansatz ist.
Der Name "Singleton"(Einling) beschreibt es ja eigentlich schon. Singletons kann man dann verwenden, wenn man verhindern muss, dass aus irgendwelchen Gründen zwei Instanzen einer Klasse existieren.
Wer sich nun die Frage stellt, ob das nicht unglaublich selten ist, hat es erkannt
. Es ist nur sehr selten der Fall, dass man wirklich nur eine einzige Klasseninstanz zulassen kann und somit ist die Verwendung von Singletons eben quasi nie sinnvoll.
Allerdings bin ich kein Freund von der Aussage "Singletons are evil". Ich behaupte, dass es sicher eine sinnvolle Anwendung von Singletons gibt(auch wenn ich sie bisher noch nicht gebraucht habe(aber wohl schon verwendet
)). Nur kann man sich ziemlich sicher sein, wenn einem die Idee kommt, man könnte für ein bestimmtes Problem ein Singleton verwenden, dass es entweder ohne Singletons auch funktionieren würde oder das Design einen Fehler hat. Wenn man sich also nicht genaustens Überlegt hat, ob der Einsatz von Singletons in einem speziellem Fall unbedingt notwendig ist und sich nicht sicher ist, dass es wirklich keine andere Möglichkeit gibt, dann verwendet man Singletons falsch
.