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

在Go语言中,Observer模式(观察者模式)常用于实现事件通知机制。它允许一个对象(被观察者)维护一系列依赖它的对象(观察者),当状态发生变化时,自动通知所有观察者。这种设计模式非常适合解耦事件的发布与处理逻辑。
要实现Observer模式,先定义观察者的统一接口,以及被观察者的结构体来管理订阅和通知。
注意:以下示例使用简单的同步通知,适用于大多数常规场景。package main
import "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 发送通知: %s\n", message)
}
// SMSNotifier 具体观察者:发送短信通知
type SMSNotifier struct{}
func (s *SMSNotifier) Update(message string) {
fmt.Printf("? SMS 发送通知: %s\n", message)
}
// LogNotifier 具体观察者:记录日志
type LogNotifier struct{}
func (l *LogNotifier) Update(message string) {
fmt.Printf("? 日志记录: %s\n", 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方法时,所有已注册的观察者都会收到消息并执行各自逻辑,实现了事件驱动的松耦合设计。
基本上就这些,不复杂但容易忽略细节。
以上就是Golang Observer事件通知实现示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号