Le modèle Observer implique un objet Publisher notifiant ses observateurs abonnés lors de l'apparition d'un événement spécifique. Le langage Go offre un moyen simple d'implémenter ce modèle à l'aide de canaux.
Pour comprendre comment cela fonctionne, considérons un scénario dans lequel plusieurs objets s'abonnent à un éditeur. L'éditeur peut ensuite diffuser des notifications à tous les abonnés via les canaux.
Voici un exemple de code Go qui illustre le modèle Observer :
package main import "fmt" // Publisher is an object that can notify subscribers of an event. type Publisher struct { listeners []chan string } // Subscriber represents an object that can receive notifications from a Publisher. type Subscriber struct { ID int Channel chan string } // Sub adds a Subscriber to the Publisher's list of listeners. func (p *Publisher) Sub(sub *Subscriber) { p.listeners = append(p.listeners, sub.Channel) } // Pub sends a notification to the Publisher's subscribers. func (p *Publisher) Pub(msg string) { for _, c := range p.listeners { c <- msg } } // Run starts a Subscriber listening for notifications from the Publisher. func (s *Subscriber) Run() { for { msg := <-s.Channel fmt.Printf("Subscriber %d received: %s\n", s.ID, msg) } } func main() { // Initialize Publisher publisher := &Publisher{} // Create and add Subscribers for i := 0; i < 3; i++ { subscriber := &Subscriber{ID: i, Channel: make(chan string)} publisher.Sub(subscriber) go subscriber.Run() } // Send notifications publisher.Pub("Hello 1") publisher.Pub("Hello 2") publisher.Pub("Hello 3") }
Dans cet exemple, l'éditeur (éditeur) a une liste des chaînes (auditeurs) sur lesquelles il diffuse des notifications. Les abonnés (Subscriber) disposent de leurs propres chaînes (Channel) pour recevoir des notifications. Lorsque l'éditeur envoie une notification (Pub), il l'envoie à tous les abonnés via leurs canaux. Chaque abonné imprime ensuite la notification reçue. Cela démontre comment l'éditeur peut diffuser des mises à jour à ses observateurs.
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!