-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathobserverv2.go
More file actions
66 lines (52 loc) · 1.21 KB
/
observerv2.go
File metadata and controls
66 lines (52 loc) · 1.21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package ch14
// observer as a obstract or interface
type V2Secretary struct {
observers []Observer
action string
}
type Observer interface {
Update()
}
type BaseObserver struct {
name string
sub *V2Secretary
}
type StockObserver struct {
BaseObserver
}
type NBAObserver struct {
BaseObserver
}
func (s *V2Secretary) Attach(observer Observer) {
s.observers = append(s.observers, observer)
}
func (s *V2Secretary) Notify() {
for _, o := range s.observers {
o.Update()
}
}
func (s *V2Secretary) SetAction(action string) {
s.action = action
}
func (o *StockObserver) Update() {
println(o.name, o.sub.action, "notified to close stock")
}
func (o *NBAObserver) Update() {
println(o.name, o.sub.action, "notified to close NBA")
}
func NewV2Secretary() *V2Secretary {
return &V2Secretary{}
}
func NewStockObserver(name string, sub *V2Secretary) *StockObserver {
return &StockObserver{BaseObserver{name, sub}}
}
func NewNBAObserver(name string, sub *V2Secretary) *NBAObserver {
return &NBAObserver{BaseObserver{name, sub}}
}
func ObserverV2() {
sub := NewV2Secretary()
sub.Attach(NewStockObserver("JackMa", sub))
sub.Attach(NewNBAObserver("PonyMa", sub))
sub.SetAction("Boss is coming")
sub.Notify()
}