观察者模式

2021-02-22  本文已影响0人  小幸运Q

当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生改变时,会通知所有观察者对象,使它们能够自动更新自己。观察者模式属于行为型模式。

image.png image.png
package main

import (
    "fmt"
)

type Subject interface {
    Attach(Observer)
    Detach(Observer)
    NotifyAll()
}

type ConcreteSubject struct {
    Observers []Observer
}

func (this *ConcreteSubject) Attach(observer Observer) {
    this.Observers = append(this.Observers, observer)
}
func (this *ConcreteSubject) Detach(observer Observer) {
    for index, obs := range this.Observers {
        if obs == observer {
            this.Observers = append(this.Observers[:index], this.Observers[index+1:]...)
        }
    }
}
func (this *ConcreteSubject) NotifyAll() {
    for _, value := range this.Observers {
        value.Update("close")
    }
}

type Observer interface {
    Update(string)
}

type ConcreteObserver struct {
}

func (this *ConcreteObserver) Update(str string) {
    fmt.Println("receive notify from subject:", str)
}

func main() {
    Newspaper := &ConcreteSubject{}
    Newspaper.Observers = make([]Observer, 0)
    Reader := &ConcreteObserver{}
    Newspaper.Attach(Reader)
    Newspaper.NotifyAll()
    Newspaper.Detach(Reader)
    Newspaper.NotifyAll()
}
上一篇 下一篇

猜你喜欢

热点阅读