implemented observer pattern
This commit is contained in:
38
behavioral/observer/observer.go
Normal file
38
behavioral/observer/observer.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package observer
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Observer interface {
|
||||
Notify(string)
|
||||
}
|
||||
|
||||
type Publisher struct {
|
||||
ObserverList []Observer
|
||||
}
|
||||
|
||||
func (p *Publisher) Subscribe(o Observer) {
|
||||
p.ObserverList = append(p.ObserverList, o)
|
||||
}
|
||||
|
||||
func (p *Publisher) Unsubscribe(o Observer) {
|
||||
var index int
|
||||
for i, v := range p.ObserverList {
|
||||
if v == o {
|
||||
index = i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
p.ObserverList = append(p.ObserverList[:index], p.ObserverList[index + 1:]...)
|
||||
}
|
||||
|
||||
func (p *Publisher) Publish(m string) {
|
||||
fmt.Println("Got new message! Publishing...")
|
||||
for _, o := range p.ObserverList {
|
||||
o.Notify(m)
|
||||
}
|
||||
fmt.Println("Puplished!")
|
||||
}
|
||||
|
Reference in New Issue
Block a user