1
0
Fork 0
pr3-sose2026-fork/go/04-design-pattern/patterns/observer.go

36 lines
499 B
Go

package patterns
type Observer interface {
Update()
}
type Subject interface {
Register(o Observer)
Unregister(o Observer)
Notify()
}
type subject struct {
observers map[Observer]bool
}
func NewSubject() Subject {
return &subject{
observers: make(map[Observer]bool),
}
}
func (s *subject) Register(o Observer) {
s.observers[o] = true
}
func (s *subject) Unregister(o Observer) {
delete(s.observers, o)
}
func (s *subject) Notify() {
for o := range s.observers {
o.Update()
}
}