Singleton-Gekrakel ist aber genau so böse wie static-Gekrakel.Quote:
Jap. Vor allem hab ich vor recht kurzer Zeit erst die Singletons entdeckt, das macht noch mal 'nen RIESIGEN Unterschied gegenüber dem vorherigen static-Gekrakel
Singleton-Gekrakel ist aber genau so böse wie static-Gekrakel.Quote:
Jap. Vor allem hab ich vor recht kurzer Zeit erst die Singletons entdeckt, das macht noch mal 'nen RIESIGEN Unterschied gegenüber dem vorherigen static-Gekrakel
Die Frage sollte sein: Wann braucht man nur eine einzige Instanz einer Klasse _und_ globalen Zugriff auf diese. Ein Logger wäre ein legitimes Beispiel.Quote:
Welche bessere Option gibt es für Klassen, die nur eine Instanz erlauben?
Das Thema gibts ja oft. Bequemlichkeit über Sauberkeit und Wartbarkeit.Quote:
aber irgendwie sind die doch auch bequem, oder nicht?
Unit testing wird viel schwieriger und komplizierter (für Hobbyprogrammierer meistens nicht relevant) und wie gesagt ist der Code dadurch noch enger gekoppelt (was man ja meistens vermeiden will).Quote:
Und abseits aller Bequemlichkeit, welche echten Gründe gibt es denn gegen die Nutzung der Singletons?
Quote:
Singletons are like communism: they both sound great on paper, but explode with problems in practice.
The singleton pattern places a disproportionate emphasis on the ease of accessing objects. It completely eschews context by requiring that every consumer use an AppDomain-scoped object, leaving no options for varying implementations. It embeds infrastructure knowledge in your classes (the call to GetInstance()) while adding exactly zero expressive power. It actually lessens your expressive power, because you can't change the implementation used by one class without changing it for all of them. You simply can't add one-off pieces of functionality.
Also, when class Foo depends on Logger.GetInstance(), Foo is effectively hiding its dependencies from consumers. This means that you can't fully understand Foo or use it with confidence unless you read its source and uncover the fact that it depends on Logger. If you don't have the source, that limits how well you can understand and effectively use the code on which you depend.
The singleton pattern, as implemented with static properties/methods, is little more than a hack around implementing an infrastructure. It limits you in myriad ways while offering no discernible benefit over the alternatives. You can use it however you'd like, but as there are viable alternatives which promote better design, it should never be a recommended practice.
Wie kannst du mit Singletons die Implementierung austauschen?Quote:
Wobei man aber zum testen irgendwie immer 'ne andere Implementierung braucht, ob die jetzt über Singletons erfolgt oder nicht ist doch recht egal?
Das liest sich so, als hätte jede Anwendung unzählige globale Variablen und Objekte. Überdenke vielleicht nochmal das komplette Design, bevor man dann einfach Singletons hinklatscht.Quote:
wenn ich ein Programm schreibe, sind die meisten globalen Sachen eh dazu da, global nur einmal zu existieren.
Das hört sich schon etwas merkwürdig an. Mit etwas Code und mehr Informationen zu dem Spiel könnten wir etwas mehr damit anfangen.Quote:
einem Spiel eine MainCharakter-Klasse hab, die dann so Sachen wie Inventar etc beinhaltet als Singleton realisier, passt das doch, oder?