中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

golang觀察者模式實現的代碼怎么寫

小億
72
2023-10-23 10:41:37
欄目: 編程語言

在Go語言中實現觀察者模式,可以按照以下步驟進行:

  1. 定義主題(Subject)接口,包含以下方法:
type Subject interface {
    Register(observer Observer)    // 注冊觀察者
    Unregister(observer Observer)  // 取消注冊觀察者
    Notify()                       // 通知觀察者
}
  1. 定義觀察者(Observer)接口,包含以下方法:
type Observer interface {
    Update()  // 觀察者更新方法
}
  1. 實現主題(Subject)結構體,同時實現Subject接口的方法:
type ConcreteSubject struct {
    observers []Observer
}

func (s *ConcreteSubject) Register(observer Observer) {
    s.observers = append(s.observers, observer)
}

func (s *ConcreteSubject) Unregister(observer Observer) {
    for i, o := range s.observers {
        if o == observer {
            s.observers = append(s.observers[:i], s.observers[i+1:]...)
            break
        }
    }
}

func (s *ConcreteSubject) Notify() {
    for _, observer := range s.observers {
        observer.Update()
    }
}
  1. 實現觀察者(Observer)結構體,同時實現Observer接口的方法:
type ConcreteObserver struct {
    name string
}

func (o *ConcreteObserver) Update() {
    fmt.Println(o.name, "received notification")
}
  1. 使用觀察者模式:
func main() {
    subject := &ConcreteSubject{}

    observer1 := &ConcreteObserver{name: "Observer 1"}
    observer2 := &ConcreteObserver{name: "Observer 2"}

    subject.Register(observer1)
    subject.Register(observer2)

    subject.Notify()

    subject.Unregister(observer1)

    subject.Notify()
}

在上述代碼中,ConcreteSubject實現了Subject接口,ConcreteObserver實現了Observer接口。當Subject的狀態發生變化時,通過調用Notify方法通知所有注冊的觀察者進行更新。在main函數中,我們創建了一個ConcreteSubject對象,并注冊了兩個ConcreteObserver對象。然后通過調用Notify方法通知所有觀察者進行更新。最后,我們取消注冊了observer1,并再次調用Notify方法,此時只有observer2會收到通知。

0
厦门市| 塘沽区| 太康县| 曲松县| 黄陵县| 山阳县| 四平市| 安吉县| 太和县| 泾阳县| 云和县| 大港区| 沭阳县| 抚远县| 平罗县| 上杭县| 阳江市| 灯塔市| 长垣县| 武定县| 库尔勒市| 怀宁县| 大渡口区| 张家口市| 泗洪县| 永嘉县| 嵊泗县| 黄石市| 平果县| 东源县| 新余市| 湖口县| 盖州市| 大化| 连山| 新兴县| 曲阜市| 桃源县| 浮山县| 西贡区| 芜湖市|