观察者模式
适用场景
优点
缺点
Golang Demo
package observer
type Observer interface {
Update(observable *Observable)
}
type Observable struct {
content string
obs []Observer
}
func NewObservable() *Observable {
return &Observable{obs: make([]Observer, 0)}
}
//AddObserver 向被观察者的订阅集合中添加观察者
//需要是线程安全的
//如果被观察者已经存在,则不添加
func (o *Observable) AddObserver(observer Observer) {
o.obs = append(o.obs, observer)
}
func (o *Observable) Notify() {
for _, observer := range o.obs {
observer.Update(o)
}
}
// 更新被订阅者的内容
func (o *Observable) UpdateContent(content string) {
o.content = content
}Java Demo
UML

补充另一个版本的Java/Scala Demo 以及源码解析
Java Demo_
Scala Demo
UML_
源码解析
Last updated