Beobachtermuster in der Go-Sprache
In vielen Programmierszenarien besteht die Notwendigkeit, dass ein Objekt mehrere Abonnenten über das Eintreten eines Ereignisses benachrichtigen muss. Dieses Muster wird üblicherweise als Beobachtermuster bezeichnet. In Go bieten Kanäle eine elegante Lösung für die Implementierung dieses Musters.
Das folgende Codebeispiel zeigt ein funktionierendes Beispiel:
<code class="go">type Publisher struct { listeners []chan *Msg } type Subscriber struct { Channel chan *Msg } func (p *Publisher) Sub(c chan *Msg) { p.appendListener(c) } func (p *Publisher) Pub(m *Msg) { for _, c := range p.listeners { c <- Msg } } func (s *Subscriber) ListenOnChannel() { for { data := <-s.Channel // Process data } } func main() { publisher := &Publisher{} subscribers := []*Subscriber{ &Subscriber{make(chan *Msg)}, &Subscriber{make(chan *Msg)}, // Additional subscribers can be added here } for _, sub := range subscribers { publisher.Sub(sub.Channel) go sub.ListenOnChannel() } publisher.Pub(&Msg{"Event Notification"}) // Pause the main function to allow subscribers to process messages time.Sleep(time.Second) } type Msg struct { Message string }</code>
In diesem Beispiel enthält der Publisher einen Teil der Listener-Kanäle. die die abonnierten Objekte darstellen. Die Pub-Methode benachrichtigt alle Zuhörer, indem sie Daten an ihre Kanäle sendet. Jeder Abonnent wartet kontinuierlich auf seinem dedizierten Kanal auf eingehende Daten zur Verarbeitung.
Das obige ist der detaillierte Inhalt vonWie können Go-Kanäle zur Implementierung des Observer Patterns verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!