github.com/acornpublishing/functional-programming-go@v0.0.0-20220401005601-c3bd3786d5a1/Chapter06/03_observer/src/observer/subject.go (about) 1 package observer 2 3 type Subject struct { 4 callbacks []Callback 5 } 6 7 func (o *Subject) AddObserver(c Callback) { 8 o.callbacks = append(o.callbacks, c) 9 } 10 func (o *Subject) DeleteObserver(c Callback) { 11 o.callbacks = append(o.callbacks, c) 12 13 newCallbacks := []Callback{} 14 for _, cb := range o.callbacks { 15 if cb != c { 16 newCallbacks = append(newCallbacks, cb) 17 } 18 } 19 o.callbacks = newCallbacks 20 } 21 22 func (o *Subject) NotifyObservers(oes ...Observable) { 23 for _, oe := range oes { 24 for _, c := range o.callbacks { 25 c.Notify(&oe) 26 } 27 } 28 }