首页 > 编程语言 >JavaScript最简单的发布/订阅模式

JavaScript最简单的发布/订阅模式

时间:2023-02-25 14:03:09浏览次数:33  
标签:YLNotificationMessages 订阅 JavaScript 模式 eventName callback user events


以下的是在ES6语法上构建的,非常适用于常见的应用场景

// 消息通知
// 发布/订阅模式
class YLNotificationMessages {
constructor () {
// 事件对象:存放事件的订阅名字和回调
this.events = {};
}

// 订阅事件
subscribe (eventName, callback) {
if (!this.events[eventName]) {
// 一个名称可以有多个订阅回调事件,所以使用数组存储回调
this.events[eventName] = [callback];
} else {
// 如果该事件名称存在,则继续往该名称添加回调事件
this.events[eventName].push(callback);
}
}

// 发布事件
publish (eventName, ...args) {
this.events[eventName] && this.events[eventName].forEach(cb => cb(...args));
}

// 取消订阅事件
unsubscribe (eventName, callback) {
if (this.events[eventName]) {
// 找到该回调,并移除它
this.events[eventName].filter(cb => cb != callback);
}
}
}

// 注册到Window对象中
window["YLNotificationMessages"] = new YLNotificationMessages();

订阅事件

实时接收参数

window.YLNotificationMessages.subscribe("ReceiveMessages", function(data) {
console.log("收到发布的消息了,哈哈");
console.log(data);
});

发布事件

比如来了新消息需要通知所有的该名称的订阅者

var data = {
"user_id": 123456,
"user_name": "百度",
"user_language": "en",
"user_uuid": "8b3d1204-e2ee-11e9-9d7c-1f8e47066aae",
"user_email": "[email protected]",
"user_avatar": "https://baidu.com/icon.png"
};
window.YLNotificationMessages.publish("ReceiveMessages", data);


标签:YLNotificationMessages,订阅,JavaScript,模式,eventName,callback,user,events
From: https://blog.51cto.com/u_14062833/6085433

相关文章

  • 设计模式之适配器模式
    简介当我们需要使用某个对象的功能,但是我们没有这个对象时,我们可以用适配器和替换对象来实现这个功能.比如我们手机有typec接口,但是我们没有这个接口的耳机,我们可以......
  • java——spring boot集成RabbitMQ——spring boot实现发布订阅模式——消费者
          pom文件:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/200......
  • A、创建模式(5种)
    设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、......
  • 4 原型模式
    4原型模式定义:通过复制现有实例来创建新的实例,无需知道相应类的信息。简单地理解,其实就是当需要创建一个指定的对象时,我们刚好有一个这样的对象,但是又不能直接使用,我会cl......
  • 3 生成器模式
    3生成器模式定义:封装一个复杂对象构造过程,并允许按步骤构造。定义解释:我们可以将生成器模式理解为,假设我们有一个对象需要建立,这个对象是由多个组件(Component)组合而成,每......
  • 2 单例模式
    2单例模式定义:确保一个类最多只有一个实例,并提供一个全局访问点单例模式可以分为两种:预加载和懒加载2.1预加载顾名思义,就是预先加载。再进一步解释就是还没有使用该单......
  • 5.1 类适配器模式
    5.1类适配器模式通过多重继承目标接口和被适配者类方式来实现适配举例(将USB接口转为VGA接口),类图如下:  USBImpl的代码:publicclassUSBImplimplementsUSB{......
  • 设计模式之代理模式
    简介在某些场景下,我们需要增强某个对象的使用,比如我们在执行某个方法前加输出一条日志,但是我们不能直接改这个类,我们可以用代理对象来实现这个功能模式应用Spri......
  • java——spring boot集成RabbitMQ——topics模式——实现消费者
           ......
  • 设计模式(十五)-面向对象概念
    一、设计原则1、单一职责:设计目的单一的类。2、开放-封闭原则:对扩展开放,对修改关闭。3、里氏替换原则:子类可代替父类。4、依赖倒置:要依赖与接口,而不是具体实现,针对接口编程......