1.概述
简介:当对象存在 1:N (observer) 的关系的时候,当 被观察对象 状态改变,通知 N 个 observer 进行 行为的改变。属于行为模式
特点:
- 对象之间的关系:1:N
- 当 被观察对象变化,要通知 N 个observer进行变化
参考:观察者模式
2.代码实现
package main
import "fmt"
//1.抽象层
//被观察对象 1:N 观察者对象。一个 Subjecter 有 N 个 Observer 对象
//当被观察状态改变,会 通知观察者对象 做相应的改变 。 当
type Subjecter interface {
Attach(observer Observer)
//Remove(observer Observer)
NotifyAllObservers()
}
type Observer interface {
Action(state int)
}
//2.实现层
type Subject struct {
state int
observers []Observer
}
func (s *Subject) GetState() int {
return s.state
}
func (s *Subject) SetState(state int) {
s.state = state
s.NotifyAllObservers()
}
func (s *Subject) Attach(observer Observer) {
s.observers = append(s.observers, observer)
}
//func (s *Subject) Remove(observer Observer) {
//
//}
func (s *Subject) NotifyAllObservers() {
for _, observer := range s.observers {
observer.Action(s.state)
}
}
//
type BinaryObserver struct {
}
func (bo *BinaryObserver) Action(state int) {
fmt.Println("binary observer ", state)
}
type OctalObserver struct {
}
func (oo *OctalObserver) Action(state int) {
fmt.Println("Octal observer ", state)
}
// main
func main() {
bo := new(BinaryObserver)
oo := new(OctalObserver)
subject := new(Subject)
subject.Attach(bo)
subject.Attach(oo)
fmt.Println("first state change")
subject.SetState(100)
fmt.Println("secord state change")
subject.SetState(200)
}