Unser Singleton Pattern soll folgende Anforderungen erfüllen:

  • Lazy: Die Instanz wird erst erstellt wenn das erste Mal darauf zugegriffen wird.
  • Threadsafe: Auch wenn mehrere Threads gleichzeitig zum ersten Mal auf die Singleton Instanz zugreifen soll sichergestellt sein, dass der Konstruktor nur einmal aufgerufen wird.
  • ohne unnötige Locks: Ein lock()-Block ist eine relativ "teure" Operation, sie soll deshalb möglichst nicht bei jedem Zugriff auf die Singleton Instanz aufgerufen werden.
public sealed class Singleton
{
    private Singleton()
    {
    }

    public static Singleton Instance { get; } = new Singleton();
}

Diese Variante funktioniert ab .NET 4.0.

Im privaten Konstruktor kann eigener Code eingefügt werden der die Singleton Instanz initialisiert.

Die Threadsicherheit wird bei statischen Variablen durch das .NET Framework garantiert. Wichtig: Dieses Pattern funktioniert so nur in .NET, in Java wäre die Threadsicherheit z.B. nicht gegeben!

 

Kommentare


Kommentare sind geschlossen.