观察者模式
在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。
观察者定义
type Observer interface{
Notify(param string)
}
观察者实现
type OneObserver struct{
}
func (this *OneObserver) Notify(param string) {
fmt.Println("OneObserver recv:",param)
}
type TwoObserver struct{
}
func (this *TwoObserver) Notify(param string) {
fmt.Println("TwoObserver recv:",param)
}
通知
type Notifier struct {
observers []Observer
}
func NewNotifier() *Notifier {
return &Notifier{observers:make([]Observer,0),}
}
//加入
func (this *Notifier) Register(observer Observer) {
this.observers=append(this.observers,observer)
}
//退出
func (this *Notifier) Degister(observer Observer) {
observers:=make([]Observer,0)
for _,v:=range this.observers {
if v!=observer{
observers=append(observers,v)
}
}
this.observers=observers
}
//通知
func (this *Notifier) Notify(param string) {
for _,v:=range this.observers {
v.Notify(param)
}
}
例子
one:=&OneObserver{}
two:=&TwoObserver{}
notifer:=NewNotifier()
notifer.Register(one)//加入one
notifer.Register(two)//加入two
notifer.Notify("1")
notifer.Degister(one)//退出one
notifer.Notify("2")