JS 设计模式之发布-订阅

1、JS ES6 定义类,并包含两个方法:subscribe(订阅)、publish(发布)。

class PubJs {
    constructor () {

        // 订阅名称列表
        this.event_list = {};
    }

    // 订阅
    subscribe (eventName, callback) {

    }

    // 发布
    publish (eventName, ...args) {

    }
}

2、编写订阅者基础逻辑:

  • 允许订阅者订阅信息;
  • 如果当前订阅关键字已存在,则更新订阅回调,否则,新增关键字,记录订阅回调;
class PubJs {

    constructor () {
        // 订阅名称列表
        this.event_list = {};
    }

    // 订阅
    subscribe (eventName, callback) {
        if (this.event_list[eventName]) {
            this.event_list[eventName].push(callback);
        } else {
            this.event_list[eventName] = [callback];
        }
    }

    // 发布
    publish (eventName, ...args) {

    }

}

3、编写发布者基础逻辑:

  • 发布者发布关键字相关信息
  • 订阅者们需要都能接受到信息,并执行相应的回调
class PubJs {

    constructor () {
        // 订阅名称列表
        this.event_list = {};
    }

    // 订阅
    subscribe (eventName, callback) {
        if (this.event_list[eventName]) {
            this.event_list[eventName].push(callback);
        } else {
            this.event_list[eventName] = [callback];
        }
    }

    // 发布
    publish (eventName, ...args) {
        if (this.event_list[eventName]) {
            this.event_list[eventName].map(cb => cb(...args));
        }
    }

}

4、本地验证:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>练习发布-订阅模式</title>
    <script src="./pub.js"></script>
</head>
<body>
    <div>
        练习发布-订阅模式
    </div>
    <script>
        const pubSub = new PubJs();
        // A订阅了SMS事件(A只关注SMS本身,而不关心谁发布这个事件)
        pubSub.subscribe(‘SMS‘, console.log);
        // B订阅了SMS事件
        pubSub.subscribe(‘SMS‘, console.log);
        // C发布了SMS事件(C只关注SMS本身,不关心谁订阅了这个事件)
        pubSub.publish(‘SMS‘, ‘I published `SMS` event‘);
        setTimeout(() => {
            pubSub.publish(‘SMS‘, ‘I published `SMS` again‘);
        }, 5000)
    </script>
</body>
</html>

  

原文地址:https://www.cnblogs.com/JockerM/p/12055567.html

时间: 2024-11-05 20:27:24

JS 设计模式之发布-订阅的相关文章

JS 设计模式八 -- 发布订阅者模式

概念 发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多(一个发布,多个观察)的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知. 优点 1.支持简单的广播通信,当对象状态发生改变时,会自动通知已经订阅过的对象. 2.发布者与订阅者耦合性降低 缺点 创建订阅者需要消耗一定的时间和内存. 如果过度使用的话,反而使代码不好理解及代码不好维护. 代码实现 var Event = (function(){ var list = {}, // 缓

JS模式之发布/订阅模式

有时在JS中需要定义特定的事件,这些事件可以传递自定义参数.此时可以采用发布/订阅模式. 发布/订阅模式简单实现如下: <script type="text/javascript"> var pubsub = {}; (function($) { $.topics = {}; // 发布或广播事件 $.publish = function (topic, args) { if (!$.topics[topic]) return false; if ($.topics[top

Javascript设计模式之发布-订阅模式

简介 发布-订阅模式又叫做观察者模式,他定义了一种一对多的依赖关系,即当一个对象的状态发生改变的时候,所有依赖他的对象都会得到通知. 回忆曾经 作为一名前端开发人员,给DOM节点绑定事件可是再频繁不过的事情.比如如下代码 document.body.addEventListener('click',function () { alert(2333); },false); document.body.click();//模拟点击事件 这里我们订阅了document.body的click事件,当bo

学习javascript设计模式之发布-订阅(观察者)模式

1.发布-订阅模式又叫观察者模式,它定义对象之间一种一对多的依赖关系. 2.如何实现发布-订阅模式 2-1.首先指定好发布者 2-2.给发布者添加一个缓冲列表,用户存放回调函数以便通知订阅者 2-3.最后发布消息时候,发布者会遍历这个缓存列表,依次触发里面存放的订阅者回调函数 例子: var salesOffice = {};salesOffice.clientList = [];salesOffice.listen = function(key,fn){    if(!this.clientL

设计模式--观察者模式(发布/订阅模式)

观察者模式简单实现,在主题中需要存在一个观察者的集合,存在一个 update(),状态改变的时候遍历调用观察者集合中的对象,调用update()方法实现通知.而观察者需要做的就是重写 update() 实现自己的逻辑,然后订阅主题,接收状态的改变信息. 上面说到的观察者模式 会导致每一个观察者都需要实现同一个方法 update(),这在实际开发中是很难实现的,所以可以通过委托事件的方式 ,在主题的集合中 存放的是一个 event 对象.event 包含对象的信息,调用的方法名,用到的参数等信息.

js 设计模式:观察者和发布订阅模式

总是把这两个当作同一个模式,但其实是不太一样的,现在重温一下. 观察者模式 观察者直接订阅目标,当目标触发事件时,通知观察者进行更新 简单实现 class Observer { constructor(name) { this.name = name; } update() { console.log(`${this.name} update`) } } class subject { constructor() { this.subs = []; } add(observer) { this.

JS设计模式(5)发布订阅模式

什么是发布订阅模式(观察者模式)? 定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作. 何时使用:一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知. 如何解决:使用面向对象技术,可以将这种依赖关系弱化. 关键代码:对于某一个topci用数组存放订阅者. 应用实例: 1.拍卖的时候,拍卖师观察最高标价,然后

JavaScript设计模式之----原生JS实现简单的发布订阅模式

第一部分: 发布订阅模式简介 发布—订阅模式又叫观察者模式,它定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在javascript开发中,一般用事件模型来替代传统的发布—订阅模式. 发布—订阅模式可以广泛应用于异步编程中,是一种替代传递回调函数的方案.比如,可以订阅ajax请求的error.success等事件.或者如果想在动画的每一帧完成之后做一些事情,可以订阅一个事件,然后在动画的每一帧完成之后发布这个事件.在异步编程中使用发布—订阅模式,就无需过

javascript 设计模式 -- 发布/订阅模式

直接上代码: index.html : <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>设计模式</title> </head> <body> <div id="box"> <div>{{message}}</div> <