52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package main
|
||
|
||
import "fmt"
|
||
|
||
// 抽象观察者
|
||
type IObserver interface {
|
||
Notify() // 当被观察对象有更改的时候,出发观察者的Notify() 方法
|
||
}
|
||
|
||
// 抽象被观察者
|
||
type ISubject interface {
|
||
AddObservers(observers ...IObserver) // 添加观察者
|
||
NotifyObservers() // 通知观察者
|
||
}
|
||
|
||
type Observer struct {
|
||
}
|
||
|
||
func (o *Observer) Notify() {
|
||
fmt.Println("已经触发了观察者")
|
||
}
|
||
|
||
type Subject struct {
|
||
observers []IObserver
|
||
}
|
||
|
||
func (s *Subject) AddObservers(observers ...IObserver) {
|
||
//fmt.Println(1)
|
||
s.observers = append(s.observers, observers...)
|
||
//fmt.Println(s.observers)
|
||
}
|
||
|
||
func (s *Subject) NotifyObservers() {
|
||
for k := range s.observers {
|
||
s.observers[k].Notify() // 触发观察者
|
||
}
|
||
}
|
||
|
||
func main() {
|
||
// 创建被观察者
|
||
s := new(Subject)
|
||
// 创建观察者
|
||
o := new(Observer)
|
||
// 为主题添加观察者
|
||
s.AddObservers(o)
|
||
|
||
// 这里的被观察者要做各种更改...
|
||
|
||
// 更改完毕,触发观察者
|
||
s.NotifyObservers()
|
||
}
|