go 新人,想写一个观察者模式。涉及到继承和重写。想请教一下大佬们.
流程就是,消费者监听用户的创建和删除事件
事件:
# 事件
type Event interface {
attach(observer Observer)
notifyAll()
}
//基础事件
type BaseEvent struct {
observers []Observer
msg interface{}
}
func (b *BaseEvent) attach(observer Observer) {
b.observers = append(b.observers, observer)
}
func (b *BaseEvent) notifyAll() {
for _, o := range b.observers {
o.Notify(b)
}
}
type User struct {
name string
}
//用户事件
type UserEvent struct {
BaseEvent
u User
}
func (u *UserEvent) Created() {
u.msg = fmt.Sprintf("user %s is created", u.u.name)
u.notifyAll()
}
func (u *UserEvent) Deleted() {
u.msg = fmt.Sprintf("user %s is Deleted", u.u.name)
u.notifyAll()
}
监听者
# 监听者定义
type Observer interface {
Notify(event Event)
addEvent(event Event)
}
type BaseObserver struct {
}
# 监听者基础
func (o *BaseObserver) addEvent(event Event) {
event.attach(o)
}
func (o *BaseObserver) Notify(event Event) {
fmt.Println("BaseObserver notify")
}
# 文档监听者
type DocumentObserver struct {
BaseObserver
}
func (d *DocumentObserver) Notify(event Event) {
e, ok := event.(*UserEvent)
if ok {
fmt.Println(e.msg)
}
}
测试代码
func TestDocumentObserver(t *testing.T) {
uEvent := &UserEvent{}
doObserver := &DocumentObserver{}
doObserver.addEvent(uEvent)
uEvent.Created()
}
结果
=== RUN TestDocumentObserver
BaseObserver notify
--- PASS: TestDocumentObserver (0.00s)
PASS
疑问
为什么,不会执行 Document 内部的代码,明明重写了父亲的方法额,应该如何修改呢