// 观察者接口
interface Observer {
  update(message: string): void
}

// 主题接口
interface Subject {
  attach(observer: Observer): void
  detach(observer: Observer): void
  notify(message: string): void
}

// 具体主题类
class ConcreteSubject implements Subject {
  private observers: Observer[] = []

  attach(observer: Observer): void {
    this.observers.push(observer)
  }

  detach(observer: Observer): void {
    const index = this.observers.indexOf(observer)
    if (index!== -1) {
      this.observers.splice(index, 1)
    }
  }

  notify(message: string): void {
    this.observers.forEach(observer => observer.update(message))
  }
}

// 具体观察者类
class ConcreteObserver implements Observer {
  update(message: string): void {
    console.log(`Received message: ${message}`)
  }
}

export { ConcreteSubject, ConcreteObserver }    

  • 原理:观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己的状态。
  • 代码流程
    • Observer 接口定义了观察者的更新方法 update()
    • Subject 接口定义了主题的三个方法:attach() 用于注册观察者,detach() 用于移除观察者,notify() 用于通知所有观察者。
    • ConcreteSubject 是具体的主题类,它维护了一个观察者列表 observers,并实现了 Subject 接口的三个方法。
    • ConcreteObserver 是具体的观察者类,实现了 Observer 接口的 update() 方法,当收到通知时,会打印出收到的消息。
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐