Le modèle de conception dans Golang est une solution universelle pour la conception de logiciels, qui peut aider les développeurs à résoudre des problèmes de conception courants et à améliorer la maintenabilité et l'évolutivité du code. Bien que Golang soit un langage de programmation typé statiquement et n'ait pas le concept de classe au sens traditionnel, des fonctions de type classe peuvent toujours être réalisées grâce à des structures et des méthodes. Ce qui suit présentera plusieurs modèles de conception courants et donnera un exemple de code Golang.
Factory Pattern est un modèle de conception créationnel utilisé pour encapsuler le processus de création d'objets afin que le client n'ait pas besoin de connaître la classe d'implémentation de l'objet spécifique. Dans Golang, le modèle d'usine peut être implémenté via des fonctions.
package main import "fmt" type Shape interface { Draw() } type Circle struct{} func (c Circle) Draw() { fmt.Println("Drawing Circle") } type Square struct{} func (s Square) Draw() { fmt.Println("Drawing Square") } func GetShape(shapeType string) Shape { switch shapeType { case "circle": return Circle{} case "square": return Square{} default: return nil } } func main() { circle := GetShape("circle") square := GetShape("square") circle.Draw() square.Draw() }
Le modèle singleton garantit qu'une classe n'a qu'une seule instance et fournit un point d'accès global. Dans Golang, le modèle singleton peut être implémenté via des variables au niveau du package et sync.Once
.
package main import ( "fmt" "sync" ) type Database struct { Name string } var instance *Database var once sync.Once func GetInstance() *Database { once.Do(func() { instance = &Database{Name: "Singleton Database"} }) return instance } func main() { db1 := GetInstance() db2 := GetInstance() fmt.Println(db1.Name) fmt.Println(db2.Name) }
Le modèle d'observateur définit une relation de dépendance un-à-plusieurs entre les objets lorsque l'état d'un objet change, tous les objets qui en dépendent seront avertis et automatiquement mis à jour. Dans Golang, le modèle d'observateur peut être implémenté à l'aide de fonctions de rappel.
package main import "fmt" type Subject struct { observers []Observer } func (s *Subject) Attach(o Observer) { s.observers = append(s.observers, o) } func (s *Subject) Notify(message string) { for _, observer := range s.observers { observer.Update(message) } } type Observer interface { Update(message string) } type ConcreteObserver struct { Name string } func (o ConcreteObserver) Update(message string) { fmt.Printf("[%s] Received message: %s ", o.Name, message) } func main() { subject := Subject{} observer1 := ConcreteObserver{Name: "Observer 1"} observer2 := ConcreteObserver{Name: "Observer 2"} subject.Attach(observer1) subject.Attach(observer2) subject.Notify("Hello, observers!") }
Ce qui précède est un exemple de code pour implémenter des modèles de conception de type classe dans Golang Grâce à ces modèles de conception, le code peut être rendu plus modulaire, maintenable et extensible. J'espère que ces exemples de codes vous seront utiles.
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!