In C# ist es möglich, statische Klassen zu deklarieren.
Diese lassen sich nicht instanziieren und enthalten nur statische Eigenschaften und Methoden.
Das Entwurfsmuster Singleton ist dazu gedacht, von einer Klasse nur eine Instanz zu erlauben.
In der Praxis wirkt doch beides gleich, oder sehe ich das falsch? Sind da statische Klassen nicht die bessere, weil einfachere, Wahl?
Hallo,
der Hauptunterschied liegt wohl darin, daß u beim Singleton eine Objektinstanz hast, und bei einer statischen Klasse nicht.
Den Sigleton kannst Du als Instanz an eine Methode übergeben. Denkbar wäre z.B. ein Szenario, in dem verschiedene Singletons existieren, die eine gemeinsame Basisklasse oder Interface haben, sowie eine Methode die ein Objekt dieser Basisklasse als Parameter erwartet. Da könnte man dann die verschiedenen Singleton-Instanzen übergeben, was bei statischen Klassen nicht möglich ist.
Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Für meine Zwecke reicht eine statische Klasse völlig aus (auch wenn C#-proprietär).
Die Vorteile eines Singleton kommen in meinem Fall nicht zum tragen.
Finde an manchen Stellen kommt der Einsatz von Entwurfsmustern Overengineering gleich - Entwurfsmuster sind ja kein Selbstzweck.
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo freundblase,
man sollte Patterns auch nur dann anwenden, wenn man sie braucht. Gibt es einen solchen Fall, wo ein Singleton Sinn macht, sollte man das Singleton auch verwenden.
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.
Hallo MrSparkle,
Mag sein, aber wie trägt das zum Thema bei?
ohne jetzt die Frage nach dem Sinn deines Beitrages zu stellen: Ich habe freundblase in der Hinsicht zugestimmt, dass Entwurfsmuster wirklich kein Selbstzweck sind und die zwangshafte Verwendung von Entwurfsmustern um ihrer selbst willen selbst ein Anti-Pattern ist.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo MrSparkle,
Mag sein, aber wie trägt das zum Thema bei?
der Hintergrund ist vermutlich, dass das Singleton-Muster eins der am meisten missverstandenen und missbrauchten Mustern ist. Insofern ist es schon fast ein Antipattern und wir ja deshalb auch im Wikipedia-Artikel erwähnt.
Das Singleton-Muster ist dafür da, dass es von einer Klasse, von der es aufgrund konzeptioneller und prinzipieller Erwägungen jetzt und in Zukunft grundsätzlich nur genau eine Instanz geben darf, auch wirklich nur genau diese eine Instanz gibt. Der Sinn des Musters ist die Quantität zu garantieren. Der christlichen Lehre entsprechend wäre Gott
eine Singleton-Klasse.
Benutzt (=missbraucht) wird das Singleton-Muster aber meistens, um einen bequemen "globalen" Zugriff auf bestimmte, an vielen Stellen benötigte Daten zu bekommen. Dafür ist es jedoch weder gemacht noch wäre das gutes Design, es dafür zu verwenden.
herbivore
Hallo herbivore,
Das Singleton-Muster ist dafür da, dass es von einer Klasse, von der es aufgrund konzeptioneller und prinzipieller Erwägungen jetzt und in Zukunft grundsätzlich nur genau eine Instanz geben darf, auch wirklich nur genau diese eine Instanz gibt. Der Sinn des Musters ist die Quantität zu garantieren. Der christlichen Lehre entsprechend wäre Gott eine Singleton-Klasse.
Könntest Du dazu mal ein Beispiel schreiben, wie man das Pattern sinnvoll nutzen kann? Im Grunde hab ich mittlerweile gelernt, das man weitestgehend auf Singleton verzichten kann, aber dagegen steht dann eben die Lücke, wo man das Pattern dann nutzen sollte.
Grüße Stephan
Hey,
das man weitestgehend auf Singleton verzichten kann
wollte nur mal ergänzen das es keinesfalls sinnlos ist das Pattern zu benutzen(bzw. sinnvoll darauf zu verzichten) man sollte es nur nicht übertreiben und nach anderen Lösungen suchen. Hier muss man aber wieder auf ein gutes Aufwand/Ergebnis Verhältnis achten.
Aber eig wollte ich fragen:
Warum sind denn statische Klassen
C#-proprietär
Sie begegnen einem doch in etlichen Programmiersprachen wieder?
Mfg Campac
Hallo Stipo,
Könntest Du dazu mal ein Beispiel schreiben, wie man das Pattern sinnvoll nutzen kann?
habe ich doch. 😃 Wenn ich auch zugebe, dass es etwas abgehoben ist. Das liegt aber mit dran, was du im folgenden schreibst:
im Grunde hab ich mittlerweile gelernt, das man weitestgehend auf Singleton verzichten kann,
Das sehe ich genauso. Entsprechend wenige sinnvolle Beispiele gibt es. Ein praktisches Beispiel wäre eine Anwendung mit Login, bei der immer nur ein Benutzer angemeldet sein kann und es entsprechend ein Singleton-Objekt gibt, um diesen Benutzer (und z.B. seine Berechtigungen) zu repräsentieren. Aber selbst bei solchen treffenden Beispielen sollte man sicher stellen, dass Änderungen am Singleton nur von einer Stelle aus erfolgen bzw. besser sogar nur von einer Stelle aus überhaupt möglich sind oder am besten das Objekt nur bei der Erstellung initialisiert wird und dann unverändert bleibt. Sonst handelt man sich letztlich doch die Probleme ein, die "globale" Daten üblicherweise verursachen, nämlich dass sie zu undurchschaubaren, dynamischen Abhängigkeiten führen.
aber dagegen steht dann eben die Lücke, wo man das Pattern dann nutzen sollte.
Eine sehr kleine Lücke. Außerdem ist ja nicht so, dass es das Ziel ist, ein bestimmtes Muster unbedingt irgendwo mal einzusetzen, sondern man sollte immer von dem zu lösenden Problem ausgehen und dann schauen, welches Muster dafür am besten geeignet ist. Und wenn man dann also vor einem bestimmten Problem steht, muss man einfach nur prüfen, ob in diesem Fall zutrifft, was ich oben sagte:
Das Singleton-Muster ist dafür da, dass es von einer Klasse, von der es aufgrund konzeptioneller und prinzipieller Erwägungen jetzt und in Zukunft grundsätzlich nur genau eine Instanz geben darf, auch wirklich nur genau diese eine Instanz gibt. Der Sinn des Musters ist die Quantität zu garantieren.
herbivore
Hallo herbivore,
danke für die nette ausführung.
Eine sehr kleine Lücke. Außerdem ist ja nicht so, dass es das Ziel ist, ein bestimmtes Muster unbedingt irgendwo mal einzusetzen, sondern man sollte immer von dem zu lösenden Problem ausgehen und dann schauen, welches Muster dafür am besten geeignet ist. Und wenn man dann also vor einem bestimmten Problem steht, muss man einfach nur prüfen, ob in diesem Fall zutrifft, was ich oben sagte:
Ich muss gestehen, das ich sogar recht wenig nach Pattern suche, bzw diese als festen Grundstein versuche zu nutzen. Im moment bin ich immer noch in der Experimentierphase, wo ich auch durchaus mal falschen Code schreiben will, denn auch und gerade aus den gemachten Fehlern kann man lernen.
Grüße Stephan
Im moment bin ich immer noch in der Experimentierphase, wo ich auch durchaus mal falschen Code schreiben will,
Die habe ich hinter mir. Ich will keinen falschen Code schreiben, sondere mache das mittlerweile öfters ganz automatisch 😉