当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式属于行为型模式。
![](https://img.haomeiwen.com/i4559317/459300136f135508.png)
![](https://img.haomeiwen.com/i4559317/9002763f62508767.png)
package main
import (
"fmt"
)
type Subject interface {
Attach(Observer)
Detach(Observer)
NotifyAll()
}
type ConcreteSubject struct {
Observers []Observer
}
func (this *ConcreteSubject) Attach(observer Observer) {
this.Observers = append(this.Observers, observer)
}
func (this *ConcreteSubject) Detach(observer Observer) {
for index, obs := range this.Observers {
if obs == observer {
this.Observers = append(this.Observers[:index], this.Observers[index+1:]...)
}
}
}
func (this *ConcreteSubject) NotifyAll() {
for _, value := range this.Observers {
value.Update("close")
}
}
type Observer interface {
Update(string)
}
type ConcreteObserver struct {
}
func (this *ConcreteObserver) Update(str string) {
fmt.Println("receive notify from subject:", str)
}
func main() {
Newspaper := &ConcreteSubject{}
Newspaper.Observers = make([]Observer, 0)
Reader := &ConcreteObserver{}
Newspaper.Attach(Reader)
Newspaper.NotifyAll()
Newspaper.Detach(Reader)
Newspaper.NotifyAll()
}
- 抽象耦合
- 支持广播通信
网友评论