Welche Alternativen bieten sich und wie sieht es in anderen Sprachen aus?
Das was ich bisher gelesen habe, besonders auf kritischen Seiten fasse ich mal so zusammen:
- Abhängigkeiten werden verschleiert
- eine Singletonklasse hat verschiedene Zuständigkeiten (Verstoß gegen das " Single Responsibility Principle").
- es Enstehen die gleichhen Probleme wie mt globals
- Tests schlagen fehl, je nachdem wie die Tests ausgeführt werden
Wenn ich mich nicht irre sind ``None`` und Module Singletons. Bei ``None`` ist es nicht weiter schlimm, weil man keine weitere Instanzen erstellen kann, aber bei Modulen kann das zu unerwünschten Nebeneffekten führen.
Wenn man Singletons einsetzt, möchte man sich ja das rumreichen von Argumenten ersparen. Wie erreiche ich dies denn in Sprachen wie Java, ohne ein Singleton zu nutzen?
Irgendwo habe ich gelesen, dass man eine Klasse mit einer default-Instanz verwenden sollte. So kann man immernoch weitere Instanzen erzeugen, hat aber auch die vorzüge des Singleton.
Auf einer anderen Seite las ich, dass Singletons kein OOP sei, sonderen eher globale Variablen erzeugt.
In einem anderen Blog fand ich:
Me: So! Have you ever heard of a book called Design Patterns?
Them: Oh, yeah, um, we had to, uh, study that back in my software engineering class. I use them all the time.
Me: Can you name any of the patterns they covered?
Them: I loved the Singleton pattern!
Me: OK. Were there any others?
Them: Uh, I think there was one called the Visitater.
Me: Oooh, that's right! The one that visits potatoes. I use it all the time. Next!!!
Nun habe ich auf solchen Seiten kein Beispiel gefunden, wo sie sagen: "Aber in dem Fall XYZ macht es ausnahmsweise einmal Sinn sie zu nutzen".