博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS 设计模式八 -- 发布订阅者模式
阅读量:5324 次
发布时间:2019-06-14

本文共 1529 字,大约阅读时间需要 5 分钟。

概念

发布---订阅模式又叫观察者模式,它定义了对象间的一种一对多(一个发布,多个观察)的关系,让多个观察者对象同时监听某一个主题对象,当一个对象发生改变时,所有依赖于它的对象都将得到通知。

 

优点

1、支持简单的广播通信,当对象状态发生改变时,会自动通知已经订阅过的对象。

2、发布者与订阅者耦合性降低

 

缺点

创建订阅者需要消耗一定的时间和内存。

如果过度使用的话,反而使代码不好理解及代码不好维护。

 

代码实现

var Event = (function(){    var list = {}, // 缓存订阅者列表          listen,   // 订阅          trigger,  // 发布订阅          remove;   // 移除订阅          listen = function(key,fn){            if(!list[key]) {                list[key] = [];            }            list[key].push(fn);        };        trigger = function(){            var key = Array.prototype.shift.call(arguments),                 fns = list[key];            if(!fns || fns.length === 0) {                return false;            }            for(var i = 0, fn; fn = fns[i++];) {                fn.apply(this,arguments);            }        };        remove = function(key,fn){            var fns = list[key];            if(!fns) {                return false;            }            if(!fn) {                fns && (fns.length = 0);            }else {                for(var i = fns.length - 1; i >= 0; i--){                    var _fn = fns[i];                    if(_fn === fn) {                        fns.splice(i,1);                    }                }            }        };        return {            listen: listen,            trigger: trigger,            remove: remove        }})();// 订阅:Event.listen("color",function(size) {    console.log("尺码为:"+size); // 打印出尺码为42}); // 发布Event.trigger("color",42);

 

转载于:https://www.cnblogs.com/gaosirs/p/10756039.html

你可能感兴趣的文章
js 浏览器页面切换事件
查看>>
Javascript Object、Function对象
查看>>
box-shadow
查看>>
常用cmd命令
查看>>
笔记-电脑操作技巧(Windows 10)-快捷键
查看>>
SVO实验篇
查看>>
python logging一个通用的使用模板
查看>>
20190712 Maxcomputer 客户端的安装
查看>>
【算法总结】哈夫曼树
查看>>
各类IT技术学习视频
查看>>
广场铺砖问题(状态压缩dp,贴砖)
查看>>
07.30《jQuery》——1.3绑定事件处理函数
查看>>
IntelliJ IDEA中文乱码问题
查看>>
【Git】原Git库拆分子目录作为新仓库,并保留log记录
查看>>
【洛谷 1164】小A点菜
查看>>
Python基础 --- 条件判断
查看>>
redis的安装和启动
查看>>
第二次作业
查看>>
EM13C添加agent记录两个报错
查看>>
maven learn note (01)
查看>>