Just for fun——go实现一下观察者模式
发布时间:2020-12-16 09:43:47 所属栏目:大数据 来源:网络整理
导读:代码 package mainimport ( "fmt")type Subject interface { RegisterObserver(o Observer) RemoveObserver(o Observer) NotifyAllObservers()}type Observer interface { // 温度,湿度,气压 Update(temp float32,humidity float32,pressure float32)}type W
代码package main import ( "fmt" ) type Subject interface { RegisterObserver(o Observer) RemoveObserver(o Observer) NotifyAllObservers() } type Observer interface { // 温度,湿度,气压 Update(temp float32,humidity float32,pressure float32) } type WeatherData struct { Temperature float32 Humidity float32 Pressure float32 Observers map[Observer]bool } func NewWeathData() *WeatherData { return &WeatherData{ Observers: make(map[Observer]bool),} } func (wd *WeatherData) RegisterObserver(o Observer) { wd.Observers[o] = true } func (wd *WeatherData) RemoveObserver(o Observer) { if _,ok := wd.Observers[o]; ok { delete(wd.Observers,o) } } func (wd *WeatherData) NotifyAllObservers() { for o,_ := range wd.Observers { o.Update(wd.Temperature,wd.Humidity,wd.Pressure) } } func (wd *WeatherData) SetMeasurements(temp float32,pressure float32) { wd.Temperature = temp wd.Humidity = humidity wd.Pressure = pressure wd.NotifyAllObservers() } type CurrentConditionsDisplay struct { Temperature float32 Humidity float32 weathData Subject } func NewCurrentConditionsDisplay(weathData Subject) *CurrentConditionsDisplay { ccd := &CurrentConditionsDisplay{ weathData: weathData,} weathData.RegisterObserver(ccd) return ccd } func (ccd *CurrentConditionsDisplay) Update(temp float32,pressure float32) { ccd.Temperature = temp ccd.Humidity = humidity // pressure 没用到 ccd.Display() } func (ccd *CurrentConditionsDisplay) Display() { fmt.Println("Current conditions: " + fmt.Sprintf("%v",ccd.Temperature) + "F degrees and " + fmt.Sprintf("%v",ccd.Humidity) + "% humidity") } func main() { weathData := NewWeathData() _ = NewCurrentConditionsDisplay(weathData) weathData.SetMeasurements(80,65,30.4) weathData.SetMeasurements(82,70,29.2) weathData.SetMeasurements(78,90,29.2) } 测试输出 Current conditions: 80F degrees and 65% humidity Current conditions: 82F degrees and 70% humidity Current conditions: 78F degrees and 90% humidity (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |