Just for fun——go实现一下观察者模式
生活随笔
收集整理的這篇文章主要介紹了
Just for fun——go实现一下观察者模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼
package mainimport ("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 float32Humidity float32Pressure float32Observers 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, humidity float32, pressure float32) {wd.Temperature = tempwd.Humidity = humiditywd.Pressure = pressurewd.NotifyAllObservers() }type CurrentConditionsDisplay struct {Temperature float32Humidity float32weathData Subject }func NewCurrentConditionsDisplay(weathData Subject) *CurrentConditionsDisplay {ccd := &CurrentConditionsDisplay{weathData: weathData,}weathData.RegisterObserver(ccd)return ccd }func (ccd *CurrentConditionsDisplay) Update(temp float32, humidity float32, pressure float32) {ccd.Temperature = tempccd.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 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的Just for fun——go实现一下观察者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯微博发表带图片的微博
- 下一篇: SVN在另类环境中实现自动提交的方法