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})}
有錢的捧個錢場,沒錢的捧個人場。
出來混不容易。