Designmuster sind bewährte Lösungen für häufige Probleme, die beim Softwaredesign auftreten. Sie bieten eine Vorlage oder einen Leitfaden zur flexiblen und wiederverwendbaren Lösung dieser Probleme.
Jedes Muster stellt eine Best Practice dar, die Entwickler an ihren spezifischen Kontext anpassen können. Entwurfsmuster werden oft in drei Hauptkategorien eingeteilt.
Um diese Serie anzukurbeln, sprechen wir über das Singleton-Muster.
Das Singleton-Muster stellt sicher, dass eine Klasse nur eine Instanz hat und bietet einen globalen Zugriffspunkt auf diese Instanz.
Dies ist in Fällen nützlich, in denen Sie eine gemeinsam genutzte Ressource verwalten müssen, z. B. Datenbankverbindungen oder Konfigurationseinstellungen.
Oft muss sichergestellt werden, dass nur eine Instanz einer Klasse vorhanden ist, beispielsweise bei der Verwaltung von Konfigurationen oder der Interaktion mit Hardwareressourcen. Ohne Singleton kann die Erstellung mehrerer Instanzen zu Problemen wie inkonsistenten Daten oder Ressourcensperren führen.
Dies kommt sehr häufig vor, wenn mit asynchronem Code gearbeitet wird, bei dem mehrere Goroutinen neue Instanzen einer Klasse erstellen oder auf gemeinsam genutzte Ressourcen zugreifen können.
Erwägen Sie einen Datenbankverbindungspool: Wenn mehrere Teile Ihrer Anwendung gleichzeitig neue Verbindungen erstellen, kann es zu redundanten oder widersprüchlichen Datenbankinteraktionen kommen. Ein Singleton stellt sicher, dass in der gesamten Anwendung nur eine Verbindung erstellt und verwendet wird.
package main import ( "fmt" "sync" ) type Singleton interface { DoSomething() string } type singleton struct{} var lock = &sync.Mutex{} var instance *singleton func NewSingletonInstance() *singleton { if instance == nil { lock.Lock() defer lock.Unlock() if instance == nil { fmt.Println("Creating single instance now.") instance = &singleton{} } else { fmt.Println("Single instance already created.") } } else { fmt.Println("Single instance already created.") } return instance } func (s *singleton) DoSomething() string { return "Doing something." } func main() { instance1 := NewSingletonInstance() instance2 := NewSingletonInstance() fmt.Printf("%p\n", instance1) fmt.Printf("%p\n", instance2) }
Die Funktion NewSingletonInstance stellt sicher, dass nur eine Instanz von Singleton erstellt wird, auch wenn sie mehrmals aufgerufen wird.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3