Wenn glaubt die Gemeinschaft, dass es angemessen ist, einen Singleton zu benutzen? [Duplikat]

StackOverflow https://stackoverflow.com/questions/138124

  •  02-07-2019
  •  | 
  •  

Frage

  

Mögliche Duplizieren:
   Singleton: Wie sollte es verwendet werden

Im Anschluss an Ewan Makepeace ‚s ausgezeichnete frühere Frage nach dem Muster Singleton, ich dachte, ich würde fragen‚ wenn sie die Gemeinschaft glaube, dass es angemessen ist, einen Singleton zu benutzen?‘

Lassen Sie mich ein Beispiel bieten bis Kritik:

Ich habe einen "IconManager" Singleton. Es beginnt mit einer Properties-Datei zu lesen, die anzeigt, wo meine Symbole auf dem Datenträger befinden, und liest dann alle Symbole und speichert sie für eine spätere Verwendung.

Die Symbole können alle über meine UI (Tabs, Tabellen, Frames usw.) verwendet werden, ... damit sie über eine statische Singleton-Methode Zugriff auf sehr convinent ist. Ich mag auch darauf achten, dass die Symbole einmal gelesen werden und nur einmal (wenn auch sehr langsam sein würde, sie von der Festplatte jedes Mal, wenn ich brauchte man lesen) Ist die Gemeinschaft glaubt, dass dies eine geeignete Verwendung eines Singleton? Wenn nicht, wie sonst könnte es umgesetzt wurde?

Was andere gültige Verwendungen von Singletons könnte es sein?

War es hilfreich?

Lösung

Ihre IconManager implementiert die Fabrik-Muster, es baut Symbole. Und Sie müssen wahrscheinlich nur eine einzige Fabrik Symbole zu bauen. Also keine Probleme für diesen Fall ein Singleton IMHO zu verwenden. Ich habe gebaut Software mit mehreren dieser zentralisiert Fabriken und alles funktionierte gut.

Siehe auch diesen Thread: Die häufigsten Beispiele für den Missbrauch von Singletonklasse

Andere Tipps

Ein alternativer Ansatz wäre eine Instanz der Klasse zu erstellen, die die Symbole geladen und Sie dann einen Verweis auf diese Instanz zu jedem und jeder Kontrolle übergeben, die die Ressourcen zugreifen muss. Auf diese Weise in Zukunft mehr als ein Symbol loader haben könnte und geben sie bei Bedarf um. Mehr für die Zukunft flexibel, aber mit dem ziemlich großen Nachteil, dass Sie die Referenz um zu zig Kontrollen passieren.

Eine gute Nutzung des Singleton ist, wenn Zugriff auf eine Ressource, die nur eine aktive Verbindung hat. Es gibt viele Hardwaregeräte, die über diese Einschränkung.

Angenommen, Sie zu einem CCTV-Kamera anschließen, der nur eine Verbindung erlaubt. Das Singleton-Muster würde diese Verbindung bei der ersten Verwendung erstellen und sie offen halten. Jedes Mal, wenn Sie ein Bild von der Kamera benötigt, möglicherweise aus mehreren Quellen, können Sie die Singleton getroffen zu wissen, dass al andere Probleme betrachtet, wird das Bild zur Verfügung.

Wenn die Kamera eine langsame Anfangsverbindungszeit zu hat, hält die Verbindung offen auf diese Weise anstatt Öffnen der Verbindung, ein Bild Grabbing und Schließen der Verbindung wieder viel effizienter sein könnte.

Ich habe eigentlich nie ein Singleton verwendet, haben aber nicht Entwurfsmuster viel verwendet. Ich denke, dass sie sehr wertvoll ae, wenn andere Muster für sie nennen, wie die Fabrik und Gateway-Muster. Aber sie fast nie gut von selbst.

Sie können die Monostate Muster betrachten wollen , die Sie gibt alle Vorteile des Singletons ohne viele der Nachteile. Auf diese Weise können Ihnen auch ein reiches Objekt haben, den Staat hat, was geschieht, nur die globalen Eigenschaften haben, die Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top