订阅发布者模式简单版 和 高级计数器 哈哈!

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>

    <script>

        // 订阅发布者模式简单版
        function test(){
            var obj = {}
            var on = function(name,callback){
                if(!obj[name]){
                    obj[name] = []
                }
                obj[name].push(callback)
            }
            var emit = function(name){
                if(!obj[name]) return;
                var length = obj[name].length,
                    i = 0,
                    temp = Array.prototype.slice.call(arguments,1)
                for(;i<length;i++){
                    obj[name][i].apply(this,temp)
                }
            }
            return {
                on,
                emit
            }
        }
        var a = test()
        a.on(‘a‘,function(a){
            console.log(a)
        })
        a.on(‘a‘,function(a){
            console.log(a)
            console.log(1)
        })
        a.emit(‘a‘,3)
        // 高级计数器
        var demo = function(l){
            var obj = {}
            var on = function(name,callback){
                if(!obj[name]){
                    obj[name] = {
                        callback:callback,
                        length:l,
                        result:{}
                    }
                }
            }
            var dispatch = function(name,result){
                if(!obj[name]) return;
                var length = --obj[name].length;
                for(var k in result){
                     obj[name].result[k] = result[k]
                }
                if(!length){
                    obj[name].callback(obj[name].result)
                    delete obj[name]
                }
            }
            return {
                on,
                dispatch
            }

        }
        var b = demo(2);
        b.on(‘test‘,function(result){
            console.log(result)
        })
        b.dispatch(‘test‘,{a:{a:‘sfdsf‘}})
        b.dispatch(‘test‘,{b:321})

    </script>
</body>
</html>
时间: 2024-10-09 01:19:49

订阅发布者模式简单版 和 高级计数器 哈哈!的相关文章

js的订阅发布者模式

前两天在笔试一家知名企业的时候遇到一道题,要实现一个简单的订阅发布者模式,当时由于各种原因我没有做,提前交了卷.现在回想起来,还是有必要好好研究一发. 首先先说说订阅发布者模式,顾名思义,就是有订阅者和发布者,两者的功能,订阅是请求在某些事件(event)到达时可以通知它并执行对应的动作(action),而发布则相对的是向订阅告知事件(event)已经到达,你可以执行对应的动作(action)了.但是具体是怎么的一个思维呢,听我娓娓道来. 大家应该都知道nodeJs是由事件来驱动的,也就是每个函

用订阅/发布者模式解决异步函数结果依赖的问题

我们都知道node是基于事件无阻塞i/o模型的,所以说大部分函数都是以异步实现的,请看下面代码: db.query(sql1, function (err, data) { //code }) db.query(sql2, function (err, data) { //code }) 如果我们上述两个操作,结果之间没有什么联系,那很好,基于node的I/O无阻塞模型,每个操作都做着自己的事情,美滋滋~ 但是在一些情况下这两个操作的结果有联系的,比如说第一个操作从数据库中取出一个人的姓,第二个

观察者模式和订阅/发布者模式(转)

在翻阅资料的时候,有人把观察者(Observer)模式等同于发布(Publish)/订阅(Subscribe)模式,也有人认为这两种模式还是存在差异,而我认为确实是存在差异的,本质上的区别是调度的地方不同. 观察者模式 比较概念的解释是,目标和观察者是基类,目标提供维护观察者的一系列方法,观察者提供更新接口.具体观察者和具体目标继承各自的基类,然后具体观察者把自己注册到具体目标里,在具体目标发生变化时候,调度观察者的更新方法. 比如有个“天气中心”的具体目标A,专门监听天气变化,而有个显示天气的

AngularJS的简单订阅发布模式例子

控制器之间的交互方式广播 broadcast, 发射 emit 事件 类似于 js中的事件 , 可以自己定义事件 向上传递直到 document 在AngularJs中 向上传递直到 rootScope 观察者模式, 订阅发布模式 类似于js中的事件机制 订阅者.on('xx发布博客', function([内容]){ 通知我, 接收到博客的[内容] }) 发布者.emit('xxx发布博客', {内容}) 优点: 业务和实际触发者分离, 代码维护性相对好 缺点: 代码复杂性更高 Angular

EventBus事件总线框架(发布者/订阅者模式,观察者模式)

一. android应用内消息传递的方式: 1. handler方式-----------------不同线程间传递消息. 2. Interface接口回调方式-------任意两个对象. 3. Intent进行组件间通信,广播方式. 二.单例比较好的写法: private static volatile EventBus defaultInstance; 构造函数应当是private,不应该是public 1 public static EventBus getDefault() { 2 if

vue双向绑定(数据劫持+发布者-订阅者模式)

参考文献:https://www.cnblogs.com/libin-1/p/6893712.html 实现mvvm主要包含两个方面,数据变化更新视图,视图变化更新数据. 关键点在于data如何更新view,因为view更新data其实可以通过事件监听即可.我们着重来分析,当数据改变,如何更新视图的. 如何知道数据变了,就是通过Object.defineProperty( )对属性设置一个set函数,当数据改变了就会来触发这个函数,所以我们只要将一些需要更新的方法放在这里面,就可以实现data更

Publisher/Subscriber 订阅-发布模式

Publisher/Subscriber 订阅-发布模式 本博后续将陆续整理这些年做的一些预研demo,及一些前沿技术的研究,与大家共研技术,共同进步. 关于发布订阅有很多种实现方式,下面主要介绍WCF中的发布订阅,主要参考书籍<Programming WCF Services>,闲话不多说进入正题.使用传统的双工回调(例子 http://www.cnblogs.com/artech/archive/2007/03/02/661969.html)实现发布订阅模式存在许多缺陷,主要问题是,它会引

ActiveMQ发布-订阅消息模式

一.订阅杂志我们很多人都订过杂志,其过程很简单.只要告诉邮局我们所要订的杂志名.投递的地址,付了钱就OK.出版社定期会将出版的杂志交给邮局,邮局会根据订阅的列表,将杂志送达消费者手中.这样我们就可以看到每一期精彩的杂志了. 仔细思考一下订杂志的过程,我们会发现这样几个特点:1.消费者订杂志不需要直接找出版社:2.出版社只需要把杂志交给邮局:3.邮局将杂志送达消费者.邮局在整个过程中扮演了非常重要的中转作用,在出版社和消费者相互不需要知道对方的情况下,邮局完成了杂志的投递. 二. 发布-订阅消息模

Android 开源项目android-open-project工具库解析之(二) 高版本向低版本兼容,多媒体相关,事件总线(订阅者模式),传感器,安全,插件化,文件

六.Android 高版本向低版本兼容 ActionBarSherlock 为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题 项目地址:https://github.com/JakeWharton/ActionBarSherlock Demo地址:https://play.google.com/store/apps/details?id=com.actionbarsherlock.sample.demos APP示例:太多了..现在连google都