Sobes.tech
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.