91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
调兵山市| 郎溪县| 广东省| 桐柏县| 前郭尔| 铅山县| 密山市| 泰州市| 梅州市| 萨嘎县| 镇远县| 五家渠市| 呼图壁县| 台北县| 遵义市| 阳东县| 云浮市| 太仆寺旗| 大宁县| 谷城县| 锦州市| 沅江市| 博罗县| 德化县| 万宁市| 镇宁| 宣武区| 田林县| 大悟县| 烟台市| 吉安县| 龙泉市| 本溪| 兴仁县| 广昌县| 闸北区| 漾濞| 巧家县| 岐山县| 沈丘县| 洛阳市|