Vorteil der statischen Klasse gegenüber Singleton

8

Duplizieren

  

Was ist los mit Singleton?
Singletons: gutes Design oder eine Krücke?
Singleton: Wie sollte es verwendet werden
Was ist so schlimm an Singletons

Sie können zahlreiche Gründe für die Verwendung eines Singleton über eine statische Klasse finden. Aber es gibt sicherlich Situationen, in denen es besser ist, vor einem Singleton eine statische Klasse zu verwenden. Was sind sie?

    
Peanut 08.05.2009, 11:19
quelle

6 Antworten

9

Sie können die statische Klasse verwenden, wenn:

1) all seine Methoden sind Dienstprogramme (schönes Beispiel - Klasse Math)

2) Sie möchten nicht, dass Ihre Instanz vom Garbage Collector (in Applets) erhalten wird, aber ich würde besser singleton dort verwenden

3) Sie sind absolut sicher, dass es in Zukunft nicht statusfähig wird und Sie sicher sind, dass Sie immer nur eine Instanz dieser Klasse benötigen

Wenn Sie Singleton verwenden und in einem Moment feststellen, dass Sie mehrere Instanzen benötigen, kann Ihr Singleton leicht in Multitone umgewandelt werden, aber Sie haben ein Problem mit der statischen Klasse

    
Roman 08.05.2009 11:38
quelle
5

Nachdem ich im Laufe der Jahre mit der Testbarkeit der Konsumenten von statischen Klassen gekämpft habe, kann ich ehrlich sagen, dass sie die Arbeit böser Geister sind. Im Ernst, ich würde statische Klassen für Erweiterungsmethoden in C # verwenden, aber nicht wirklich woanders.

    
Preet Sangha 08.05.2009 11:24
quelle
3

Wenn Ihre Klasse keinen Zustand speichert, verwenden Sie eine statische Klasse.

Wenn der Status gespeichert wird und Sie eine einzelne Instanz benötigen, verwenden Sie (möglicherweise) ein Singleton.

Ansonsten verwenden Sie eine reguläre Klasse.

    
Patrick McDonald 08.05.2009 11:23
quelle
2

Statische Klasse ist besser, wenn Sie die Implementierung nicht ändern müssen. Mit einem Singleton können Sie eine Schnittstelle mit verschiedenen Implementierungen haben. Eine statische Klasse kann nur eine Implementierung sein.

    
Joshua 08.05.2009 11:22
quelle
0

Ein Singleton ist eine Klasse, von der nur eine Instanz instanziiert werden kann, während einer statischen Methode keine Instanz zugeordnet ist.

Wenn Sie die gewünschte Funktion mit einer einzigen statischen Methode implementieren können, ist dies wahrscheinlich Ihre beste Methode, da sie einfacher zu implementieren ist. Ziehen Sie Erweiterungsmethoden in Betracht - sie sind nur statische Methoden mit syntaktischem Zucker. Wenn Sie die statische Methode als Helper für eine vorhandene Klasse logisch anzeigen können, ist es sinnvoll, eine statische Methode zu verwenden.

Wenn es andererseits eine Art von Zustand in der Funktionalität gibt, die Sie erreichen möchten, ist es wahrscheinlich am besten, stattdessen einen Singleton zu verwenden. Das Singleton-Objekt kann seinen Status enthalten / verwalten und den gleichzeitigen Zugriff / Threading verwalten, während dies bei statischen Klassen und statischen Methoden viel komplizierter wird. Wenn Sie Singleton in C # verwenden, empfehle ich Ihnen, Jon Skeets Artikel über die richtige Singleton-Implementierung zu lesen, die unter Ссылка .

Singletons sind eher mit statischen Klassen als mit statischen Methoden vergleichbar. Ein großer Vorteil, den Singletons in diesem Vergleich haben, ist, dass sie Schnittstellen implementieren und von Basisklassen ableiten können. Dies ermöglicht Ihnen, ihre Implementierungen von ihren Schnittstellen zu entkoppeln. Wenn ich zum Beispiel eine Schnittstelle IAccountService in meiner Kernbaugruppe mit einer Singleton-Implementierung, SingletonAspNetAccountService in meiner Serviceschicht habe, kann ich die IAccountService in meine UI-Schicht mit einem IoC-Container injizieren, ohne dass eine Abhängigkeit davon erforderlich ist meine Serviceschicht in der UI-Ebene. Auf der anderen Seite, wenn ich eine statische Accounts -Klasse hätte, müsste ich entweder einen Adapter zu den Methoden der statischen Klasse erstellen oder eine Abhängigkeit von der Service-Schicht in meiner UI haben, um auf die statische Kontofunktion zugreifen zu können / p>     

smartcaveman 05.04.2011 13:35
quelle
-2

Es ist immer dort, wo Sie die Singleton-Instanz nicht irgendwo hinführen müssen. Zum Beispiel ist Singleton nützlich, wenn es eine Schnittstelle implementiert, Sie können es nicht mit einer statischen Klasse tun.

Denken Sie daran, dass jede Klasseninstanz ein Singleton ist, der von JVM verwaltet wird. Also statische Klasse ist ein Singleton.

    
alamar 08.05.2009 11:22
quelle

Tags und Links