【寒江雪】Go實現觀察者模式

來源:互聯網
上載者:User
Observer Pattern

  觀察者模式使得一種類型的執行個體可以發送事件給其他類型,前提是接收事件的執行個體要根寄件者訂閱這個事件。 實現

  先來定義要使用到的介面

package observertype(    Event struct{        Data int64    }    Observer interface{        OnNotify(Event)    }    Notifier interface{        Register(Observer)        Degister(Observer)        Notify(Event)    })

  然後寫幾個簡單的類型實現這些介面

package observerimport "fmt"type EventCenter struct{    observers []Observer}func (this *EventCenter)Notify(event Event){    for _,v:=range this.observers{        v.OnNotify(event)    }}func (this *EventCenter)Register(o Observer){    this.observers=append(this.observers,o)}func (this *EventCenter)Degister(o Observer){    for i:=0;i<len(this.observers);i++{        if this.observers[i]==o{            this.observers=append(this.observers[:i],this.observers[i+1:]...)            break        }    }}func NewEventCenter()*EventCenter{    res := EventCenter{}    res.observers=make([]Observer,0)    return &res}type EventReciver struct{}func (this *EventReciver)OnNotify(event Event){    fmt.Printf("Event receive:%d\n",event.Data)}

  最後是main檔案

package mainfunc main(){    eventCenter := observer.NewEventCenter()    r_1 := observer.EventReciver{}    r_2 := observer.EventReciver{}    eventCenter.Register(&r_1)    eventCenter.Register(&r_2)    eventCenter.Notify(observer.Event{1})    eventCenter.Degister(&r_1)    eventCenter.Notify(observer.Event{2})}
有錢的捧個錢場,沒錢的捧個人場。 出來混不容易。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.