概念
观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并作出相应的行为
要素
1.Observer 观察者,观察者观察主题状态发生改变,作出反应
2.Subject 主题,主题发生状态改变时,通知观察者
概念解析
我们初中学生物课的时候,里面有一个例子,当发生地震时,不同的动物有不同的反应,狗会汪汪叫,鸡鸭鹅会高飞,这里我们可以把各种动物比喻成观察者,地震比喻为主题
代码分析
观察者们(动物们)
//动物接口,定义了动物作出反应的行为
type Animal interface {
Response()
}
//鸭子,实现Animal接口
type Duck struct{}
func (*Duck) Response() {
fmt.Println("家禽高飞")
}
//狗,实现Animal接口
type Dog struct{}
func (*Dog) Response() {
fmt.Println("狗汪汪叫...")
}
主题(地震)
//地震现象
type Earthquake struct {
animals []Animal//所有对地震作出反应的动物们
}
//添加动物,添加相应的动物后,当地震发生时,被添加动物会自动作出反应
func (earthquake *Earthquake) AddAnimals(animal Animal) {
earthquake.animals = append(earthquake.animals, animal)
}
//发生地震,通知动物们
func (earthquake *Earthquake) Quake() {
for _, animal := range earthquake.animals {
animal.Response()
}
}
模拟地震发生过程
earthquake := Earthquake{}
earthquake.AddAnimals(new(Dog))
earthquake.AddAnimals(new(Duck))
earthquake.Quake()//会打印出 狗汪汪叫... 家禽高飞