Go 18.0 专业五


01. 观察者模式

<p>观察者模式用于触发联动。</p> <p>一个对象的改变会触发其它观察者的相关动作,而此对象无需关心连动对象的具体实现。</p> <h4>obserser.go</h4> <pre><code>package observer import "fmt" type Subject struct { observers []Observer context string } func NewSubject() *Subject { return &amp;Subject{ observers: make([]Observer, 0), } } func (s *Subject) Attach(o Observer) { s.observers = append(s.observers, o) } func (s *Subject) notify() { for _, o := range s.observers { o.Update(s) } } func (s *Subject) UpdateContext(context string) { s.context = context s.notify() } type Observer interface { Update(*Subject) } type Reader struct { name string } func NewReader(name string) *Reader { return &amp;Reader{ name: name, } } func (r *Reader) Update(s *Subject) { fmt.Printf("%s receive %s\n", r.name, s.context) }</code></pre> <h4>obserser_test.go</h4> <pre><code>package observer func ExampleObserver() { subject := NewSubject() reader1 := NewReader("reader1") reader2 := NewReader("reader2") reader3 := NewReader("reader3") subject.Attach(reader1) subject.Attach(reader2) subject.Attach(reader3) subject.UpdateContext("observer mode") // Output: // reader1 receive observer mode // reader2 receive observer mode // reader3 receive observer mode }</code></pre>

页面列表

ITEM_HTML