Golang Observer事件通知实现示例

Go语言中Observer模式通过定义Observer接口和Subject结构体实现事件通知机制,支持松耦合的订阅与通知。首先定义Observer接口的Update方法,再创建Subject结构体管理观察者列表,并实现Attach添加观察者和Notify同步通知所有观察者。具体观察者如EmailNotifier、SMSNotifier和LogNotifier分别实现Update方法处理通知。在main函数中注册多个观察者实例后,调用Notify触发事件,输出对应消息。可扩展异步通知、取消订阅及复杂数据传递以增强功能。

golang observer事件通知实现示例

在Go语言中,Observer模式(观察者模式)常用于实现事件通知机制。它允许一个对象(被观察者)维护一系列依赖它的对象(观察者),当状态发生变化时,自动通知所有观察者。这种设计模式非常适合解耦事件的发布与处理逻辑。

定义观察者接口和被观察者结构

要实现Observer模式,先定义观察者的统一接口,以及被观察者的结构体来管理订阅和通知。

注意:以下示例使用简单的同步通知,适用于大多数常规场景。

package mainimport "fmt"// Observer 观察者接口,定义接收通知的方法type Observer interface {    Update(message string)}// Subject 被观察者,维护观察者列表并发送通知type Subject struct {    observers []Observer}// Attach 添加观察者func (s *Subject) Attach(o Observer) {    s.observers = append(s.observers, o)}// Notify 通知所有观察者func (s *Subject) Notify(message string) {    for _, observer := range s.observers {        observer.Update(message)    }}

实现具体的观察者

创建几个具体的观察者类型,它们实现Update方法以响应通知。

// EmailNotifier 具体观察者:发送邮件通知type EmailNotifier struct{}func (e *EmailNotifier) Update(message string) {    fmt.Printf("? Email 发送通知: %sn", message)}// SMSNotifier 具体观察者:发送短信通知type SMSNotifier struct{}func (s *SMSNotifier) Update(message string) {    fmt.Printf("? SMS 发送通知: %sn", message)}// LogNotifier 具体观察者:记录日志type LogNotifier struct{}func (l *LogNotifier) Update(message string) {    fmt.Printf("? 日志记录: %sn", message)}

使用示例:注册并触发事件通知

在main函数中演示如何注册多个观察者,并通过被观察者触发事件。

立即学习“go语言免费学习笔记(深入)”;

func main() {    // 创建被观察者    subject := &Subject{}    // 创建观察者实例    email := &EmailNotifier{}    sms := &SMSNotifier{}    log := &LogNotifier{}    // 注册观察者    subject.Attach(email)    subject.Attach(sms)    subject.Attach(log)    // 触发事件,通知所有观察者    subject.Notify("用户已成功注册")}

输出结果:

? Email 发送通知: 用户已成功注册? SMS 发送通知: 用户已成功注册? 日志记录: 用户已成功注册

每当调用Notify方法时,所有已注册的观察者都会收到消息并执行各自逻辑,实现了事件驱动的松耦合设计。

可扩展性建议

若需异步通知,可在Notify中使用goroutine并发调用Update增加Detach方法以支持取消订阅使用interface{}或自定义事件结构体传递更复杂的数据结合channel实现更高级的事件总线

基本上就这些,不复杂但容易忽略细节。

以上就是Golang Observer事件通知实现示例的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1412313.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月16日 06:13:36
下一篇 2025年12月16日 06:13:49

相关推荐

发表回复

登录后才能评论
关注微信