Singleton

Singleton – Definition

Stellt sicher, dass eine Klasse nur eine Instanz hat und stellt einen globalen Zugriffspunkt zur Verfügung.

Ensure a class only has one instance, and provide a global point of access to it.

Gang of four (Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides)

Singleton – Struktur

Singleton – Pseudocode

class Singleton
	// eine Singleton-Klasse beinhaltet immer eine Klassenvariable,
	// die eine Instanz vom eigenen Typ hält.
	field instance : Singleton
	
	// damit die Klasse nicht mit dem Schlüsselwort 'new'  neu instantiiert
	// werden kann, muss der Konstruktor privat sein.
	// somit kann eine neue Instanz nur aus der eigenen Klasse erzeugt
	// werden
	private constructur()
	
	// ein Singleton muss immer eine statische Methode beinhalten, die die
	// Instanz bereitstellt
	static method GetInstance() : Singleton
		// beim ersten Aufruf wird eine neue Instanz der Singleton-Klasse
		// erzeugt und anschließend immer wiederverwertet
		if this.instance is null
			this.instance = new Singleton()
		return this.instance;
	
	// ein Singleton sollte auch Geschäftslogik beinhalten, die ab dieser
	// Stelle definiert werden kann
	method Operation(text) : any

program Client
	// an dieser Stelle wird eine neue Instanz erzeugt
	Singleton foo = Singleton.GetInstance()
	foo.Operation("Hallo")
	// ...
	Singleton bar = Singleton.GetInstance()
	foo.Operation("Welt")
	// die Variable 'bar' beinhaltet dasselbe Objekt, wie auch die Variable 'foo'

Singleton – C# optimiertes Beispiel

public sealed class Singleton
{
	private static readonly Lazy<Singleton> _lazy = 
		new Lazy<Singleton>(() => new Singleton());
		
	private Singleton() { }
	
	public static Singleton GetInstance()
	{
		return _lazy.Value;
	}
}

Singleton – Verwandte Muster

Viele Pattern, können als Singleton implementiert werden. Darunter fallen auch: