首页 > 其他分享 >前端设计模式——观察者模式

前端设计模式——观察者模式

时间:2023-03-08 14:55:48浏览次数:29  
标签:Observer 前端 subject 观察者 world 设计模式 data Subject

前端中的观察者模式(Observer Pattern),定义了对象之间的一种一对多的依赖关系,使得当一个对象状态发生改变时,所有依赖于它的对象都能够得到通知并自动更新。

在前端开发中,观察者模式常被用来实现组件间的数据传递和事件处理。比如,当一个组件的状态发生改变时,可以通过观察者模式来通知其他组件更新自身的状态或视图。

在观察者模式中,通常会定义两种角色:

1. Subject(主题):它是被观察的对象,当其状态发生改变时会通知所有的观察者。
1. Observer(观察者):它是观察主题的对象,当主题状态发生改变时会接收到通知并进行相应的处理。

以下是一个简单的实现示例:

class Subject {
  constructor() {
    this.observers = []
  }
  
  addObserver(observer) {
    this.observers.push(observer)
  }
  
  removeObserver(observer) {
    this.observers = this.observers.filter(obs => obs !== observer)
  }
  
  notify(data) {
    this.observers.forEach(obs => obs.update(data))
  }
}

class Observer {
  update(data) {
    console.log(`Received data: ${data}`)
  }
}

// Usage
const subject = new Subject()
const observer1 = new Observer()
const observer2 = new Observer()

subject.addObserver(observer1)
subject.addObserver(observer2)

subject.notify('Hello, world!')
// Output:
// Received data: Hello, world!
// Received data: Hello, world!

subject.removeObserver(observer1)

subject.notify('Goodbye, world!')
// Output:
// Received data: Goodbye, world!

 

在上面的示例中,我们定义了一个 Subject 类和一个 Observer 类。Subject 类有三个方法,addObserver 用于添加观察者,removeObserver 用于移除观察者,notify 用于通知所有观察者。

Observer 类只有一个方法 update,用于接收主题传递的数据。我们创建了两个 Observer 实例并将它们添加到了 Subject 实例中,然后调用了 notify 方法来通知它们更新数据。

在实际开发中,我们通常会使用现成的库或框架来实现观察者模式,比如 React 中的状态管理库 Redux 和事件处理库 EventEmitter。

标签:Observer,前端,subject,观察者,world,设计模式,data,Subject
From: https://www.cnblogs.com/ronaldo9ph/p/17191978.html

相关文章

  • 浏览器对于特定域名的缓存资源没有更新导致前端页面排版出错
    如题,在使用网上下载来的前端模板,放入我的项目(已经部署过)中,启动服务器后访问,发现排版出现问题: 但资源已经更新在项目里了,css、font等等。随后发现不部署到服务器的时候......
  • 前端开发是做什么的
    前端开发是做什么的?工作职责_我想去吃ya的博客-CSDN博客......
  • 前端路由(vue2 + vue3 + react)
    前端路由的设置:Vue2路由(vue-router3)安装插件npmivue-router@3router/index.js文件设置importVuefrom"vue";importVueRouterfrom"vue-router";Vue.use(VueRo......
  • 设计模式之结构型模型
    设计模式之结构型模型桥接模式尽可能不要使用类的继承,而尽可能使用合成/聚合描述:继承方法子类与父类的高依赖性限制了复用和程序的灵活性。选择不同的接口实现选择不同......
  • 设计模式5——自定义Spring框架
    1、Spring核心功能结构Spring大约有20个模块,由1300多个不同的文件构成。这些模块可以分为:核心容器、AOP和设备支持、数据访问与集成、Web组件、通信报文和集成测试等。下......
  • 简易的工厂设计模式
    工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露对象的创建逻辑。在工厂模式中,我们定义一个接口或抽象类,该接口或抽象类用于创建对象,但让子类......
  • 前端设计模式——发布订阅模式
    JavaScript中的发布/订阅模式(Pub/Sub)是一种常用的设计模式。它允许在应用程序中定义对象之间的一对多的依赖关系,当一个对象的状态发生变化时,所有依赖于它的对象都会被通知......
  • 什么是大前端技术?微信小程序用户占比达25%
    什么是大前端技术?大前端技术(Full-StackDevelopment)是指同时涉及到前端、后端、移动端等多个领域的技术。它既包含了传统前端技术,如HTML、CSS、JavaScript等,也包含了后端......
  • 使用flex弹性造APP首页轮子【前端Flex弹性布局】
    一.使用flex弹性造一个APP首页轮子这是内科大企业课(全栈开发_web前端的课程),需求如下:使用Flex弹性布局,仿写下面的页面:二.需求分析和完成步骤先分析这个页面,我们可以先......
  • python83 路飞项目、前端 登录页面分析、登录页面、注册页面
    登录页面分析点击登录,弹出登录组件,盖住整个屏幕(定位)点击登录组件中的X,关闭登录组件(子传父)Login.vue<template><divclass="login"><spanstyle="padding:......