go语言观察者模式经典案例
时间: 2024-08-03 14:01:13 浏览: 72
Go语言并没有内置的观察者模式,但它非常适合通过接口和切面编程(如`interface{}`和匿名函数)模拟这种设计模式。观察者模式在Go中通常用于事件驱动的系统,比如通知中心或者发布订阅模型。下面是一个简单的例子:
```go
package main
import "fmt"
// 观察者接口
type Observer interface {
Receive(event Event)
}
// 主体(发布者)
type Subject struct {
observers []Observer
}
func (s *Subject) Attach(observer Observer) {
s.observers = append(s.observers, observer)
}
func (s *Subject) Detach(observer Observer) {
for i, obs := range s.observers {
if obs == observer {
s.observers = append(s.observers[:i], s.observers[i+1:]...)
break
}
}
}
// 事件
type Event string
func (e Event) String() string { return string(e) }
// 观察者实现
type ConcreteObserver struct{}
func (o *ConcreteObserver) Receive(event Event) {
fmt.Printf("Received event: %v\n", event)
}
func main() {
subject := &Subject{}
concreteObserver := &ConcreteObserver{}
subject.Attach(concreteObserver)
subject.Emit(Event("Event A")) // 调用通知
}
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)