5 Stimmen

Parametrisierte Singleton-Muster

Der Link hier drüben listet ([http://www.yoda.arachsys.com/csharp/singleton.html\]\[1]) einige Singleton-Muster in C# auf. Der Artikel beschreibt auch die Selbstverständlichkeit, dass ein Singleton keine Parameter akzeptieren soll, "da sonst eine zweite Anfrage nach einer Instanz, aber mit einem anderen Parameter, problematisch sein könnte". Das bedeutet, dass alle Parameter, die Sie benötigen, um die Klasse zum Laufen zu bringen, als Eigenschaft eingefügt werden sollten.

Ich bin neugierig zu wissen, ob es irgendwelche parametrisierten Singleton-Entwurfsmuster da draußen gibt. Die Annahme von Werten als Eigenschaft erzwingt nichts für den Verbraucher.

3voto

EggyBach Punkte 4040

Basierend auf Ihrer Frage scheint es, dass Sie ein abstraktes Factory-Muster (erstellt eine Instanz von mehreren Klassenfamilien) betrachten, das eine interne Liste/ein internes Verzeichnis von Klassen führt, die bereits instanziiert wurden, und somit die Funktionalität des Singleton-Musters nachahmt.

Wenn das Objekt in der internen Liste vorhanden ist, wird es zurückgegeben. Wenn nicht, wird eine neue Instanz erstellt, der Liste hinzugefügt und zurückgegeben.

1voto

aku Punkte 118808

Dies bedeutet, dass alle Parameter, die Sie benötigen um die Klasse zum Laufen zu bringen, als als Eigenschaft induziert werden.

Idealerweise sollte eine Singleton-Klasse nicht von externem Code abhängen.

Wenn Sie dem Singleton-Konstruktor zusätzliche Informationen zur Verfügung stellen müssen, können Sie einfach einen Pool von Objekten erstellen.

Dies kann eine einfache Liste oder eine andere geeignete Datenstruktur sein. Sie müssen sie thread-sicher machen (wenn es darauf ankommt) und sicherstellen, dass nicht mehrere Objekte mit denselben Parametern instanziiert werden.

Im Grunde genommen werden Sie eine Klassenfabrik haben. Sie wird das gleiche Objekt für die gleichen Parameter zurückgeben.

In diesem Fall haben Sie N Singleton-Objekte - d.h. Objekte mit unterschiedlichem Zustand werden als völlig unterschiedliche Instanzen behandelt.

Beispiele für solche Singletons finden Sie in Containern mit Inversion of Controls.

Sie können beispielsweise einen Dienst haben, der von anderen Diensten abhängt. Wenn Sie container.Get(type of service) aufrufen. DI wird der Container automatisch eine Dienstinstanz mit den erforderlichen Parametern initialisieren und sie an den Aufrufer zurückgeben. Diese Dienstinstanz wird jedoch zum Singleton - Sie können keinen anderen Dienst mit denselben Parametern erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X