你好世界
  • 入门
  • 框架
  • Webpack
  • 模式
  • 知识点
  • 面试题
  • Koa
  • Java
  • Python
  • MongoDB
  • Redis
  • Algorithm
  • AI 概述
  • 机器学习
  • 深度学习
  • 自然语言处理
  • 关键词说明
  • 使用技巧
  • 本地模型安装及下载
  • 调试
  • 测试
  • GIT
  • Network
  • Linux
  • VSCode
  • GitHub
  • Mock
  • 入门
  • 框架
  • Webpack
  • 模式
  • 知识点
  • 面试题
  • Koa
  • Java
  • Python
  • MongoDB
  • Redis
  • Algorithm
  • AI 概述
  • 机器学习
  • 深度学习
  • 自然语言处理
  • 关键词说明
  • 使用技巧
  • 本地模型安装及下载
  • 调试
  • 测试
  • GIT
  • Network
  • Linux
  • VSCode
  • GitHub
  • Mock
  • DesignMode

    • 设计模式
    • 面向对象
    • UML 类图
    • 设计原则
    • 面试题分析
    • 工厂模式
    • 单例模式
    • 适配器模式
    • 装饰器模式
    • 代理模式
    • 外观模式(网关?)
    • 观察者模式
    • 迭代器模式
    • 状态模式
    • 其它设计模式
  • SoftwareArchitecturePatterns

    • SoftwareArchitecturePatterns (软件架构模式)
    • MVVC
    • MVC
    • MVP

观察者模式

介绍

  • 发布 & 订阅
  • 一对多

设计原则验证

  • 主题和观察者分离,不是主动触发而是被动监听,两者解耦;
  • 符合开放封闭原则;

示例

  • 点咖啡,点好之后坐等被叫
示例-10
// 主题,保存状态,状态变化之后触发所有观察者对象
class Subject {
  constructor(){
    this.state = 0;
    this.observers = [];
  }
  getState(){
    return this.state;
  }
  setState(state){
    this.state = state;
    this.notifyAllObservers()
  }
  notifyAllObservers() {
    this.observers.forEach(observer => {
      observer.update()
    })
  }
  attach(observer) {
    this.observers.push(observer)
  }
}

// 观察者
class Observer {
  constructor(name, subject) {
    this.name = name;
    this.subject = subject;
    this.subject.attach(this)
  }
  update(){
    console.log(`${this.name} 更新,state:${this.subject.getState()}`)
  }
}

// 测试

let s = new Subject();
let o1 = new Observer('黄', s)
let o2 = new Observer('黄2', s)
let o3 = new Observer('黄3', s)

s.setState(6)

场景

  • nodejs中:处理http请求;多进程通讯;
  • vue 和 react 组件生命周期触发;
  • vue watch;
最后更新时间: 3/7/22, 9:11 PM
贡献者: DESKTOP-ER5718D\zt
Prev
外观模式(网关?)
Next
迭代器模式