package problem import "fmt" // Subject 主题接口 type Subject interface { Register(observer Observer) Deregister(observer Observer) Notify(data interface{}) } // Observer 观察者接口 type Observer interface { Update(data interface{}) } // BaseSubject 主题基类实现 type BaseSubject struct { observers []Observer } func (s *BaseSubject) Register(observer Observer) { s.observers = append(s.observers, observer) } func (s *BaseSubject) Deregister(observer Observer) { for i, obs := range s.observers { if obs == observer { s.observers = append(s.observers[:i], s.observers[i+1:]...) return } } } func (s *BaseSubject) Notify(data interface{}) { for _, obs := range s.observers { obs.Update(data) } } //// 主题实现 //type ConcreteSubject struct { // BaseSubject //} // //// 观察者实现 //type ConcreteObserver struct { // name string //} // //func (o *ConcreteObserver) Update(data interface{}) { // fmt.Printf("%s 收到通知:%v\n", o.name, data) //} // //func main() { // subject := &ConcreteSubject{} // // observer1 := &ConcreteObserver{name: "观察者1"} // observer2 := &ConcreteObserver{name: "观察者2"} // // subject.Register(observer1) // subject.Register(observer2) // // subject.Notify("新数据1") // subject.Deregister(observer1) // // subject.Notify("新数据2") //} // 主题实现 type EventSubject struct { BaseSubject } // 观察者实现 type EventObserver struct { name string } func (o *EventObserver) Update(data interface{}) { fmt.Printf("%s 收到通知:%v\n", o.name, data) }