Junior
Was ist das Singleton-Designmuster?
sobes.tech KI
Antwort von AI
Das Singleton-Muster stellt sicher, dass eine Klasse nur eine Instanz hat, und bietet einen globalen Zugriffspunkt darauf.
Es wird verwendet, wenn nur eine Instanz einer Ressource benötigt wird, z.B.:
- Konfigurationsmanager
- Datenbankverbindungspool
- Logger
Implementierungen:
-
Lazy Initialization: Die Instanz wird bei der ersten Verwendung erstellt.
public sealed class Singleton { private static Singleton? instance = null; private static readonly object lockObject = new object(); private Singleton() { } // Privater Konstruktor public static Singleton Instance { get { if (instance == null) { lock (lockObject) { if (instance == null) { instance = new Singleton(); } } } return instance; } } } -
Statische Initialisierung: Die Instanz wird beim Laden der Klasse erstellt.
public sealed class Singleton { private static readonly Singleton instance = new Singleton(); private Singleton() { } // Privater Konstruktor public static Singleton Instance { get { return instance; } } }Vorteil: Standardmäßig threadsicher, einfachere Implementierung. Nachteil: Die Instanz wird erstellt, auch wenn sie nicht verwendet wird.
-
Mit
Lazy<T>:.NET Framework bietet integrierte Unterstützung für Lazy-Initialisierung.public sealed class Singleton { private static readonly Lazy<Singleton> lazyInstance = new Lazy<Singleton>(() => new Singleton()); private Singleton() { } // Privater Konstruktor public static Singleton Instance { get { return lazyInstance.Value; } } }Vorteil: Thread-Sicherheit und Lazy-Initialisierung out-of-the-box, sauberer Code.
Vorteile des Singleton:
- Kontrolle über die Anzahl der Instanzen.
- Globaler Zugriffspunkt.
- Lazy-Initialisierung (bei einigen Implementierungen).
Nachteile des Singleton:
- Kann das Prinzip der einzigen Verantwortung verletzen.
- Erschwert Unit-Testing.
- Kann zu starker Kopplung im Code führen.