Singleton in gehen
Wie funktioniert eine Implementierung des Singleton-Entwurfsmusters in der Programmiersprache?
InformationsquelleAutor der Frage Ben Noland | 2009-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie funktioniert eine Implementierung des Singleton-Entwurfsmusters in der Programmiersprache?
InformationsquelleAutor der Frage Ben Noland | 2009-12-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abgesehen von dem argument, ob oder nicht zu implementieren das singleton-Muster ist eine gute Idee, hier ist eine mögliche implementation:
single
undinstantiated
sind privat, aberNew()
ist öffentlich. So, Sie kann nicht direkt instanziiertsingle
ohne Umweg überNew()
und es verfolgt die Anzahl der Instanzen mit der private booleaninstantiated
. Passen Sie die definition dersingle
abschmecken.Jedoch, wie einige andere, haben notiertdies ist nicht thread-sicher ist, es sei denn, du bist nur Initialisierung von singleton in
init()
. Ein besserer Ansatz wäre zu nutzensync.Once
zu tun, die harte Arbeit für Sie:Siehe auch hasan j s Vorschlag nachzudenken, der ein Paket als ein singleton. Und schließlich überlegen Sie sich, was andere sind, was darauf hindeutet: das Singleton sind oft ein Indikator für eine problematische Umsetzung.
InformationsquelleAutor der Antwort esm
Bevor Sie versuchen, einen Weg zu finden, um die Kurve Gehen, um deinen Willen, möchten Sie vielleicht werfen Sie einen Blick auf einige Artikel:
SINGLETON - das anti-pattern!
Singletons sind Pathologische Lügner
Ursache von Singletons.
Zusammenfassend, im Laufe der Zeit Leute gefunden haben, singletons als suboptimal, imho besonderswenn Sie versuchen zu tun, alle test-driven development: auf vielen Ebenen, Sie sind so ziemlich genauso schlimm wie Globale Variablen.
[disclaimer: ich weiß, das ist nicht eine strenge Antwort auf deine Frage, aber es ist wirklich relevant]
InformationsquelleAutor der Antwort jkp
Einfach Ihre Variablen und Funktionen auf Paketebene.
Siehe auch die ähnliche Frage: Wie man ein singleton in Python
InformationsquelleAutor der Antwort hasen
Ich denke, dass in einer gleichzeitigen Welt, die wir brauchen, um ein bisschen mehr bewusst, dass diese Zeilen werden nicht ausgeführt atomar:
Ich würde Folgen Sie dem Vorschlag von @Vermarkter und verwenden Sie das Paket "sync"
InformationsquelleAutor der Antwort fabrizioM
Die beste Vorgehensweise wird sein:
Sollten Sie diese Link
InformationsquelleAutor der Antwort sadlil
Können Sie tun Initialisierung mit der einmal Paket:
Dadurch wird sichergestellt, dass Ihre init-Methoden, die bekommen nur einmal aufgerufen.
InformationsquelleAutor der Antwort marketer
Müssen nur eine einzige statische, Finale, Konstanten, Globale, anwendungsweite Instanz des Objekts, das Sie wollen.
Dies jedoch widerspricht dem OO-Paradigma. Sein Einsatz sollte begrenzt sein, um primitive und unveränderliche Objekte, die nicht mutable Objekte.
InformationsquelleAutor der Antwort BalusC
Sollten Sie sich bewusst sein, dass
Once.Do
ernsthaft über die Ausführung des Codes nur einmal. Das bedeutet, der code ist immer nur einmal ausgeführt, obwohl er vielleicht in Panik:vom https://golang.org/pkg/sync/#Once.Do
Ich verwendet, Mutexe, statt, um sicherzustellen, dass eindeutige Initialisierung einer globalen variable zu überwinden diese Einschränkung:
InformationsquelleAutor der Antwort Andre Steingress