go知识重新整理

This commit is contained in:
Estom
2021-09-03 05:34:34 +08:00
parent 62309f856a
commit 1bad082e49
291 changed files with 29345 additions and 2 deletions

View File

@@ -0,0 +1,51 @@
package observer
import "fmt"
//观察者模式:用于触发联动,一个对象的改变会触发其他观察者的相关动作,而此对象无需关心联动对象的具体实现
func NewSubject() *Subject {
return &Subject{
observers: make([]Observer, 0),
}
}
type Subject struct {
observers []Observer
context string
}
type Observer interface {
Update(*Subject)
}
func (s *Subject) Attach(o Observer) {
s.observers = append(s.observers, o)
}
//notify every observers
func (s *Subject) notify() {
for _, o := range s.observers {
o.Update(s)
}
}
func (s *Subject) UpdateContext(context string) {
s.context = context
//notify all observers
s.notify()
}
func NewReader(name string) *Reader {
return &Reader{
name: name,
}
}
type Reader struct {
name string
}
func (r *Reader) Update(s *Subject) {
fmt.Printf("%s receive %s\n", r.name, s.context)
}

View File

@@ -0,0 +1,23 @@
/**
* @Author:zhoutao
* @Date:2020/12/12 上午10:49
* @Desc:
*/
package observer
func ExampleObserver() {
Subject := NewSubject()
reader1 := NewReader("reader1")
reader2 := NewReader("reader2")
reader3 := NewReader("reader3")
Subject.Attach(reader1)
Subject.Attach(reader2)
Subject.Attach(reader3)
//update and notify all obervers
Subject.UpdateContext("observer mode")
}