Modèle de conception du framework Go : modèle Singleton : assurez-vous qu'une seule instance d'objet existe, implémentée via des variables globales et une initialisation unique. Modèle d'usine : créez plusieurs variantes d'un objet, créez des objets de manière dynamique via des fournisseurs. Modèle d'observateur : avertit les objets dépendants lorsque l'état de l'objet change et est implémenté via des observateurs qui peuvent être observés.
Exploration des modèles de conception de code source du framework Go
Dans le framework Go, les modèles de conception sont largement utilisés pour optimiser la structure du code, améliorer la maintenabilité et l'évolutivité. Cet article explorera les modèles de conception courants dans le framework Go et démontrera leurs applications pratiques à travers des cas pratiques.
Modèle Singleton
Problème : Assurez-vous qu'une seule instance d'un objet existe.
Solution : Créez des variables globales et initialisez-les au premier accès.
package main import ( "fmt" "sync" ) type Singleton struct {} var ( once sync.Once instance *Singleton ) func GetInstance() *Singleton { once.Do(func() { instance = &Singleton{} }) return instance } func main() { instance1 := GetInstance() instance2 := GetInstance() fmt.Println(instance1 == instance2) // 输出: true }
Modèle d'usine
Problème : Créer plusieurs variantes d'un objet.
Solution : Créez un fournisseur d'usine pour créer des objets de manière dynamique.
package main type Animal interface { Speak() string } type Dog struct {} func (d *Dog) Speak() string { return "Woof!" } type Cat struct {} func (c *Cat) Speak() string { return "Meow!" } type AnimalFactory struct {} func (f *AnimalFactory) CreateAnimal(name string) (Animal, error) { switch name { case "dog": return &Dog{}, nil case "cat": return &Cat{}, nil default: return nil, fmt.Errorf("Unsupported animal type: %s", name) } } func main() { factory := AnimalFactory{} dog, _ := factory.CreateAnimal("dog") cat, _ := factory.CreateAnimal("cat") fmt.Println(dog.Speak()) // 输出: "Woof!" fmt.Println(cat.Speak()) // 输出: "Meow!" }
Modèle d'observateur
Problème : Notifier plusieurs objets dépendants lorsque l'état d'un objet change.
Solution : Créer un objet observable (observable) et plusieurs observateurs. Lorsque ce qui est observé change, il en informe tous les observateurs.
package main import "fmt" type Observable struct { observers []Observer state int } func (o *Observable) AddObserver(observer Observer) { o.observers = append(o.observers, observer) } func (o *Observable) NotifyObservers() { for _, observer := range o.observers { observer.Update(o.state) } } type Observer interface { Update(state int) } type ConcreteObserver1 struct {} func (c *ConcreteObserver1) Update(state int) { fmt.Println("Observer 1:", state) } type ConcreteObserver2 struct {} func (c *ConcreteObserver2) Update(state int) { fmt.Println("Observer 2:", state) } func main() { observable := Observable{} observer1 := ConcreteObserver1{} observer2 := ConcreteObserver2{} observable.AddObserver(observer1) observable.AddObserver(observer2) observable.state = 10 observable.NotifyObservers() // 输出: Observer 1: 10, Observer 2: 10 }
Ces modèles de conception sont largement utilisés dans le framework Go. La maîtrise de ces modèles de conception améliorera considérablement la qualité et la maintenabilité de votre code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!