JavaScript设计模式(一):观察者模式

在js中观察者模式讲解 在JavaScript中,(Observer Pattern)是一种设计模式,允许一个对象(,Subject)维护一个依赖它的对象列表(观察者,Observer),并在它自身状态发生变化时自动通知这些观察者。观察者模式的典型使用场景包括事件系统、数据绑定和实时更新等情况。 阅读详情

1.什么是观察者模式?

观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象,观察者模式也被称为事件订阅者、监听者、Event-Subscriber、Listener、Observer

2.设计观察者模式所遇到的问题

1.假如我们应用场景是一个商店(卖最新款手机),手机刚发布,陆陆续续的往实体店发货进行线下售卖,顾客每天都会去到商店询问新款手机是否到货了,但如果没有到货,顾客只能空手而归

2.假如我们的应用场景还是一个商店(卖最新款手机),华为最新款手机到货了,这个时候商店用邮件的方式告诉所有顾客,华为最新款手机到货了,这样,部分顾客就无需反复前往商店了,但也可能会惹恼对新产品没有兴趣的其他顾客

2.1两个场景的矛盾

我们似乎遇到了一个矛盾:要么让顾客浪费时间检查产品是否到货,要么让商店浪费资源去通知没有需求的顾客

3.面对矛盾的解决方案

我们只需要安排一个发布消息的人(发布者publisher)对当时交了华为最新款手机订金的人(订阅者subscribers),发送邮件告诉他们华为最新款手机到店了,就可以避免这种矛盾的发生了。

3.1解决方案的重要逻辑

发布者机制里面要对付了定金的订阅者进行登记,所以肯定得有一个updata事件进行更新处理订阅者的消息

3.2解决方案中的发布者机制

1)一个用于存储订阅者对象引用的列表成员变量;(subscribers数组对象)

2)几个用于添加或删除该列表中订阅者的公有方法;

3) 一个消息发布方法;(notifysubscribers方法)

3.3解决方案中的订阅者机制

1) 一个更新状态的方法(update方法),也就是收到发布消息后做的举动(去店里取手机)

​3.4类比真实世界

3.5代码实现

    class Publisher{
      // 发布者机制
      constructor(){
        this.subscribers = [];
        this.state = '最新款华为手机到店了!'
      }
      addsubscribers(subscriber){
        // 添加订阅者名单
        this.subscribers.push(subscriber)
      }
      removesubscribers(subscriber){
        // 移除订阅者名单
        this.subscribers.forEach((item) => {
          if(item.id === subscriber.id){
            let index = this.subscribers.indexOf(item);
            this.subscribers.splice(index,1);
          }
        })
        return '-------finish-------'; // 这里是附和谷歌浏览器的函数调用返回undefined的解决 
                                       // 方式
      }
      notifysubscriber(){
        // 状态更新,发布消息
        this.subscribers.forEach( item => {
          item.update(this.state);
        })
      }
    }
    class Subscriber{
      // 订阅者机制
      constructor(name,id){
        this.name = name
        this.id = id
      }
      update(state){  // 订阅者根据发布的消息做出的举动
        console.log(`${state}现在我要去店里面取最新款华为手机`)
      }
    }
    let publisher = new Publisher(); // 发布者
    let subscriber = new Subscriber('ldh',1); // 订阅者1
    let subscriber1 = new Subscriber('hzh',2); // 订阅者2
    let subscriber2 = new Subscriber('hxh',3); // 订阅者3
    publisher.addsubscribers(subscriber); // 订阅者登记
    publisher.addsubscribers(subscriber1); // 订阅者登记
    publisher.addsubscribers(subscriber2); // 订阅者登记
    publisher.notifysubscriber(); // 手机到了,通知订阅者
    publisher.removesubscribers(subscriber1); // 订阅者2取消了订阅

JS设计模式之观察者模式(发布订阅者模式) 首先还是先写一个中心调度器大对象,里面包含了,发布消息方法,添加观察者方法和取消观察者方法,其实也叫做添加订阅者方法和取消订阅方法,先说publish方法,我们把事件类型和数据传入到里面,该方法首先就会判断,观察者,也就是订阅者容器里面有没有方法,如果没有的话就直接返回,如果有的话就会使用foreach进行遍历,并且触发执行该订阅者里面的所有方法。是“false”就表示用户需要取消的订阅者内部没有订阅者方法,此时就什么都不做,因为订阅者方法为空,也取消不了。 阅读详情

相关推荐

利用JavaScript Proxy实现观察者模式

JavaScript Proxy是ES6引入的一个新的内置对象,它允许你为对象提供一个拦截器(handler),可以拦截对象的大部分操作,包括属性查找、赋值、枚举、函数调用等。Proxy的使用非常简单,只需要创建一个Proxy实例,传入一个目标对象和一个handler对象即可。handler对象定义了需要拦截的行为。例如,下面的代码创建了一个简单的Proxy,它拦截了对象属性的读取操作:// Proxy。

weixin_35950531的博客 1052

js观察者模式

js观察者模式

ssjjrr的博客 945

java modbus通讯协议_Modbus通 讯 协 议

电磁流量计Modbus通 讯 协 议(版本号:9000-K V9.1.1)2020年01月01日通讯协议针对KFD电磁流量计工业应用设计,版本:9000-K V9.1.1,该版本主要用于实时数据采集、流量测量、流量累计控制及部分参数的修改。一、主机系统通讯部件要求1.国际标准RS-485通讯接口部件,不小于11Bytes 的通信缓冲区(FIFO),支持1200、2400、4800、96...

weixin_39956612的博客 1012

一篇文章搞懂js观察者模式

观察者模式是一种行为设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个目标对象。当这个目标对象的状态发生变化时,它会通知所有观察者对象,使它们能够自动更新自己。这种模式在软件设计中被广泛使用,特别是在处理分布式事件处理系统时。它提供了一种对象间通信的方式,同时保持了较低的耦合度。观察者模式是一种强大而灵活的设计模式,在JavaScript和前端开发中有广泛的应用。它允许对象之间保持一种松散的耦合,同时提供了一种有效的对象间通信机制。

weixin_52624209的博客 1751

TruckSim与Simulink联合仿真中的车轮转角精确控制策略

本文深入探讨了TruckSim与Simulink联合仿真中实现车轮转角精确控制的关键策略。针对多轴车辆路径跟踪时转角指令失灵的常见问题,核心在于正确配置TruckSim转向轴的外部输入模式(Advanced Settings),并确保仿真接口的稳定搭建。文章详细解析了从单轴到多轴协同转向的配置方法,并提供了提升MPC路径跟踪精度的实战技巧与调试经验。

weixin_29035147的博客 367

在MDK5.37版本中添加Complier Version 5( 解决Missing Compiler Version 5 )

本文章仅作为个人学习记录,方法也是从其他博主的博客中得到的,链接如下:二、Keil——Missing Compiler Version 5 和 core_cm3.c 问题解决 - YI颗白菜 - 博客园 (cnblogs.com) 问题描述 更新最新的keil版本(MDK5.37)后,在编译以前版本的工程文件时,发现出现了非常多的报错,在网上搜索之后发现原来时编译器版本不匹配的问题,即MDK5.37中使用的是Version 6版本的编译器,而缺少Version 5,对于以前编写的工

leveling99的博客 1万+

JavaScript设计模式——观察者模式

JavaScript发布订阅模式(观察者模式)

量子前端的博客 2791

Python 爬虫实战:拼多多商品评论情感分析(含词云生成与差评预警)

在电商行业竞争日益激烈的当下,商家对商品评论的分析需求愈发迫切。通过 Python 爬虫收集拼多多商品评论,并结合情感分析、词云可视化及差评预警技术,商家可精准洞察消费者反馈,优化商品与服务。本文将深度剖析从爬虫搭建到数据挖掘的关键环节,助力读者构建全流程电商评论分析系统。

yansideyucsdn的博客 1450

JS的几种设计模式

JS的几种简单设计模式

k464746的博客 1万+

操作系统实验一到实验九合集(哈工大李治军)

操作系统实验一到实验九合集(哈工大李治军) 有详细代码及注释,程序已在本地测试,均能跑通

leoabcd12的博客 5万+

HSTS漏洞(缺少Strict-Transport-Security头)

HTTP严格传输安全性(HSTS)告诉浏览器只能使用HTTPS访问网站。检测到您的Web应用程序未实现HTTP严格传输安全性(HSTS),因为响应中缺少严格传输安全性标头。理想回复响应头因存在:Strict-Transport-Security: max-age=31536000信息。nginx添加响应头。

墨痕诉清风的博客 4409

JavaScript设计模式详解:09、观察者模式

这一节我们来看 观察者模式 , 观察者模式 在面向前端的设计模式中是非常重要的一种设计模式,它在jQuery、Vue、React 包括原生JavaScript 语法中都有大量的应用。首先我们先来看 观察者模式 的定义。 观察者模式(发布订阅模式)就是:使用一个目标对象来管理所有依赖于它的观察者(订阅者)对象(一个或多个),并且在它本身的状态改变时主动向观察者(订阅者)对象发出通知。 我们用大白...

LGD_Sunday的专栏 1427

TC3XX - MCAL知识点(九):PWM EB-tresos配置说明及代码浅析

脉冲宽度调制(PWM)驱动器负责提供与AUTOSAR指定的PWM信号生成相关的标准服务。PWM通道的底层定时器驱动是GTM (TOM或ATOM片)或CCU6 (T12或T13片)定时器通道。软硬件匹配关系如下:PWM直接引用的是GTM与CCU6模块,然后GTM与CCU6再关联到Port的,根据软硬件匹配关系,也能调用中断来使用,本例子没使用中断。CCU6是一个高分辨率的16位捕获和比较单元,具有特定的应用模式,主要用于交流驱动控制。特殊的工作模式支持控制无刷直流电机使用霍尔传感器或反电动势检测。

梦想技术家 2887

JavaScript设计模式(四)——策略模式、代理模式、观察者模式

本文我们介绍了策略模式、代理模式和观察者模式,快来一睹为快吧...

HuoZhiyan 的博客 1758

T527 uart串口配置导致系统进不去

T527 s_uart串口配置导致系统进不去。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 676

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JS设计模式之单例模式、组合模式、观察者模式、策略模式

关于JS中的设计模式与单例模式的介绍,在上一篇博客中做了介绍,详情见:JS设计模式及单例模式 好,下面我将结合一些实例,说一下我对组合模式以及观察者模式的了解: 1、组合模式: 组合模式在对象间形成树形结构; 组合模式中基本对象和组合对象被一致对待; 无须关心对象有多少层, 调用时只需在根部进行调用; 将多个对象的功能,组装起来,实现批量执行; 想象我们现在手上有个万能遥控器, 当我们回家,...

huangfuyk.的博客 6024

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【JavaScript设计模式】观察者模式

这篇文章并不是笔者原创,而是在学习设计模式中对比较好的文章的提炼与总结,作为笔记便于自己复习。观察者模式有一个“别名”,叫(之所以别名加了引号,是因为两者之间存在着细微的差异),这个别名非常形象地诠释了观察者模式里两个核心的角色要素——“发布者”与“订阅者”。周一刚上班,前端开发李雷就被产品经理韩梅梅拉进了一个钉钉群——“员工管理系统需求第99次变更群”。这个群里不仅有李雷,还有后端开发 A,测试同学 B。三位技术同学看到这简单直白的群名便立刻做好了接受变更的准备、打算撸起袖子开始干了。此时韩梅梅却说:“别

前端学习博客 2439

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JS设计模式的理解

千锋逆战班,Rayson.Jin学习打卡第二天! 今天给大家介绍一下JS设计模式。目前市场上设计模式有很多种,今天我们就学习常用的三种设计模式。 1.单例模式 2.组合模式 3.观察者模式 下面给大家逐个介绍一下 什么是设计模式 针对 特定问题, 给出的简洁而优化的处理方案 1.单例模式 01.作用 实例(构造函数的实例化对象) 让一个构造函数一辈子只有一个实例对象 当你需要一个构造函数一生只能 ...

RaysonJinS的博客 4123

JavaScript设计模式 -- 观察者模式

观察者模式是一种行为型设计模式,其主要目的是实现对象间的解耦。当一个对象(被观察者、Subject)的状态发生变化时,所有依赖于它的对象(观察者、Observer)都会收到通知,并自动更新。这种模式广泛应用于事件驱动、UI 数据绑定、实时数据推送等场景。例如,在前端开发中,当数据模型变化时,视图(观察者)需要自动更新;在实时系统中,当数据源更新时,所有订阅了该数据的组件都能即时获得更新。观察者模式通过建立一对多的依赖关系,使得对象间的状态更新和通知变得简单而灵活。

u014676858的博客 1748

JavaScript设计模式之观察者模式

一、什么是观察者模式 观察者模式又叫做发布—订阅模式,是我们最常用的设计模式之一。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知和更新。观察者模式提供了一个订阅模型,其中对象订阅事件并在发生时得到通知,这种模式是事件驱动的编程基石,它有利益于良好的面向对象的设计。 看了上面的这段描述,可能还是不懂什么是观察者模式。我们还可以来看...

143

JS设计模式(4):观察者模式

本文介绍了JavaScript中的观察者模式,这是一种用于实现对象间一对多依赖关系的行为型设计模式。文章通过电商、新闻订阅等场景说明了该模式的应用价值,详细解析了观察者模式的两个核心角色(被观察者和观察者)及其实现原理。代码示例展示了如何利用Proxy代理对象实现属性变化监听和自动通知机制,并通过对比表格突出了观察者模式在耦合性、扩展性等方面的优势。最后列举了该模式在状态监控、消息订阅等场景的广泛应用,帮助开发者构建低耦合、高扩展性的代码架构。

luanzi____的博客 1096

javascript 设计模式(观察者模式)

本系列文章来源于《Javascript设计模式》(张容铭版),做一个记录。 最近在学习《Javascript设计模式》一书,对学习过程做一个笔记总结。系列文章大家可以关注我的个人博客会不定时更新,大家一起学习一起进步。 概念 观察者模式:又称为发布-订阅者模式或者消息机制(妈蛋叫什么不重要主要是理解意思)。 首先我们需要把观察者创建出来,观察者模式有三部分, 消息容器 订阅消息方法 取消订阅的消...

weixin_34138377的博客 200

【JavaScript 设计模式】观察者模式与发布订阅模式

1. 什么是观察者模式/发布-订阅模式? 2. 观察者模式的实现 3. 发布-订阅模式的实现 4. Vue中的发布-订阅模式 4.1 EventBus 4.2 Vue源码 5. 观察者模式的优缺点 6. 发布-订阅模式的优缺点

公众号:前端充电宝 849

JavaScript设计模式——Observe模式(观察者模式)

通常一个优秀的项目,会使用到很多的设计模式,这些设计模式在我们的解决方案中,会起到十分重要的作用,它的存在,能使项目的结构更加简洁、清晰、易于理解。 所以了解常用的设计模式,会让我们在日常开发更加得心应手,也会让团队沟通变得更加顺畅。 在《设计模式:可复用面向对象软件基础》一书中强调:当我们评估一个面向对象系统的质量时,所使用的方法之一就是判断系统的设计者是否强调了对象之间的公共系统关系。 简介 那么在当前这个博文中,我介绍的就是 JavaScript 语言的 Observer设计模式。 初次接触 Ob.

Vico的Hu的博客 2237

前端设计模式,观察者模式和发布订阅者模式的区别及JS手写实现

前端,设计模式,常见设计模式,观察者模式,订阅发布者模式,两种模式的区别,JS手写设计模式

qq_40868156的博客 973

浅析JavaScript设计模式——发布-订阅/观察者模式

观察者模式 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知 前一段时间一直在写CSS3的文章 一直都没写设计模式 今天来写写大名鼎鼎观察者模式 先画张图观察者模式的理解我觉得还是发布-订阅模式的叫法更容易我们理解 这就类似我们在微信平台订阅了公众号 当它有新的文章发表后,就会推送给我们所有订阅的人我们可以看到例子中这种模式的优点 我们作为

尐轩web前端网络日志 1万+
上一篇: Class类
下一篇: JS异步函数发展史
执迷原理
博客等级 码龄5年 7粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执迷原理

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值