static
Klassen sind nicht für etwas, das einen Zustand braucht. Sie sind nützlich, um eine Reihe von Funktionen zusammenzufassen, z. B. Math
(oder Utils
in Projekten). Der Klassenname gibt uns also nur einen Anhaltspunkt, wo wir die Funktionen finden können, mehr nicht.
Singleton
ist mein Lieblingsmuster und ich verwende es, um etwas an einem einzigen Punkt zu verwalten. Es ist flexibler als static
Klassen und kann ihren Zustand beibehalten. Sie kann Schnittstellen implementieren, von anderen Klassen erben und Vererbung zulassen.
Meine Regel für die Wahl zwischen static
y singleton
:
Wenn es eine Reihe von Funktionen gibt, die zusammen gehalten werden sollen, dann static
ist die Wahl. Alles andere, was einen einzigen Zugang zu einigen Ressourcen benötigt, könnte als singleton
.
4 Stimmen
Abhängig von der Sprachimplementierung und Ihren Verwendungsmustern kann ein Singleton sein könnte weniger effizient aufgrund des Overheads durch den Aufruf der
getInstance()
Methode jedes Mal, wenn Sie sie verwenden wollen (obwohl wahrscheinlich in den meisten Fällen es spielt keine Rolle ).5 Stimmen
Es gibt bereits eine Menge Antworten. Es ist eigentlich ein
singleton
Objekt, bei demstatic
Methoden sind nur Funktionen, eine Nicht-OO-Entität.4 Stimmen
Das hängt von der Implementierung ab. csharpindepth.com/Artikel/Allgemeines/Singleton.aspx
4 Stimmen
Ein Unterschied besteht darin, dass Sie Dritten erlauben wollen, die Implementierung der Klasse zu liefern. In diesem Fall benötigen Sie normalerweise auch ein Factory-Muster. Siehe agiletribe.wordpress.com/2013/10/08/
0 Stimmen
IMO fasst diese Antwort die Situation sehr gut zusammen stackoverflow.com/questions/14097656/
0 Stimmen
Interessante Verbindung: stackoverflow.com/questions/1496629/
0 Stimmen
Singleton werden lazily initialisiert und static werden eagerly initialisiert. Singleton hilft also, Speicher zu sparen