Laden...

Singleton vs. statische Klasse. .. und wann überhaupt einsetzen?

Erstellt von freundblase vor 14 Jahren Letzter Beitrag vor 14 Jahren 8.744 Views
F
freundblase Themenstarter:in
58 Beiträge seit 2009
vor 14 Jahren
Singleton vs. statische Klasse. .. und wann überhaupt einsetzen?

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?

3.170 Beiträge seit 2006
vor 14 Jahren

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

Gelöschter Account
vor 14 Jahren
F
freundblase Themenstarter:in
58 Beiträge seit 2009
vor 14 Jahren

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.

1.002 Beiträge seit 2007
vor 14 Jahren

Hallo freundblase,

sehr witzig zu lesen: Anti-Pattern

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

1.044 Beiträge seit 2008
vor 14 Jahren

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

5.658 Beiträge seit 2006
vor 14 Jahren

sehr witzig zu lesen:
>

Mag sein, aber wie trägt das zum Thema bei?

Weeks of programming can save you hours of planning

1.002 Beiträge seit 2007
vor 14 Jahren

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

49.485 Beiträge seit 2005
vor 14 Jahren

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

699 Beiträge seit 2007
vor 14 Jahren

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

C
63 Beiträge seit 2010
vor 14 Jahren

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

49.485 Beiträge seit 2005
vor 14 Jahren

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

699 Beiträge seit 2007
vor 14 Jahren

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

U
282 Beiträge seit 2008
vor 14 Jahren

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 😉