观察者模式(发布-订阅者模式) 素颜马尾好姑娘i 2022-05-22 06:00 216阅读 0赞 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 //观察者 var Observer=(function(){ var _messages={}; return{ //注册消息接口 register:function(type,fn){ if(typeof _messages[type]==="undefined"){ _messages[type]=[fn]; }else{ _messages[type].push(fn); } }, //发布消息接口 fire:function(type,args){ if(!_messages[type]){ return; } var event={ type:type, args:args||{} }, i=0; len=_messages[type].length; for(;i<len;i++){ _messages[type][i].call(this,event); } }, //移除消息接口 remove:function(type,fn){ if(_messages[type] instanceof Array){ var i=_messages[type].length-1; for(;i>=0;i--){ _messages[type][i]===fn && _messages[type].splice(i,1); } } } }; })(); 简单使用: var fn1=function(e){ console.log("I am "+e.type); }; var fn2=function(e){ console.log(e.type,e.args.msg); }; Observer.register("test",fn1); Observer.register("test",fn2); Observer.fire('test',{msg:"传递参数"});//I am test test 传递参数 Observer.remove('test',fn1); Observer.fire("test",{msg:"删除了一个test事件"}) 实例: 实现提交消息后,在ul中插入一条消息,点击删除按钮,删除该消息,更改消息的数量。 共有<span id="msg_num">0</span>条消息 <ul id="msg"> </ul> <textarea id="user_text"></textarea> <button id="user_submit">提交</button> ![这里写图片描述][70] (function(){ //追加一则消息 function addMsgItem(e){ var text=e.args.text, li=document.createElement("li"), button=document.createElement("button"); li.innerHTML=text; button.innerHTML="删除"; button.onclick=function(){ document.getElementById("msg").removeChild(li); Observer.fire("removeMsg",{num:-1}); }; li.appendChild(button); document.getElementById("msg").appendChild(li); } Observer.register("addMsg",addMsgItem); })(); (function(){ //更改消息的数目 function changeMsgNum(e){ var num=e.args.num; var omsgNum=document.getElementById("msg_num"); omsgNum.innerHTML=parseInt(omsgNum.innerHTML)+num; } Observer.register("addMsg",changeMsgNum); Observer.register("removeMsg",changeMsgNum); })(); (function(){ //用户点击提交按钮 document.getElementById("user_submit").onclick=function(){ var text=document.getElementById("user_text").value; if(text===''){ return; } document.getElementById("user_text").value=''; Observer.fire("addMsg",{text:text,num:1}); }; })(); [70]: /images/20220522/82df6dd2a4a74f87bda8da84ff37e639.png
相关 java设计模式--观察者(发布订阅) *1、概述: ** 观察者模式又称“发布订阅模式”定义一种一对多的依赖关系,让多个观察者对象同时监视着被观察者的状态,当被观察者的状态发送变... 旧城等待,/ 2024年04月17日 20:15/ 0 赞/ 81 阅读
相关 观察者模式 vs 发布订阅模式 目录 场景 观察者模式 发布订阅模式 总结 -------------------- 场景 有一回面试,面试官问: 末蓝、/ 2023年10月06日 19:03/ 0 赞/ 3 阅读
相关 订阅发布和观察者模式 发布订阅模式 > 把多个方法暂存起来,最后一次触发执行 作用: 解偶 使用场景: 如,多个类或者函数内,可以分散订阅某个操作,最后统一发布。分散的好处就是不 ╰+攻爆jí腚メ/ 2022年08月28日 14:47/ 0 赞/ 209 阅读
相关 js 订阅者模式(观察者模式) 原文网址:http://www.cnblogs.com/LuckyWinty/p/5796190.html [附加题] 请实现下面的自定义事件 Event 对 悠悠/ 2022年07月15日 13:15/ 0 赞/ 194 阅读
相关 观察者模式(发布-订阅者模式) 观察者模式定义了一种依赖关系,解决了主体对象和观察者之间功能的耦合,主要应用于大型项目的模块化开发中,解决团队开发中模块之间的通信问题,利用观察者模式还可以实现自定义事件。 素颜马尾好姑娘i/ 2022年05月22日 06:00/ 0 赞/ 217 阅读
相关 设计模式之观察者模式(发布订阅模式) 说明:本文参照《大话设计模式》中的案例做简要解析 观察者模式: 又叫发布-订阅模式,定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。 深藏阁楼爱情的钟/ 2022年05月21日 10:39/ 0 赞/ 267 阅读
相关 javascript 观察者模式 发布订阅模式 观察者模式 观察者模式,每一个观察者对象有两个方法 添加监听`subscribe` 发布事件`publish` 观察者有个`list`存放所有的已经添加监 本是古典 何须时尚/ 2022年04月24日 10:14/ 0 赞/ 213 阅读
相关 学习观察者模式与发布/订阅模式 > 最近学习了观察者模式和发布/订阅模式,但是一直有种不得要领的感觉,今天重新复习了一遍又有了新的思考,记录一下学习收获。 观察者模式 概念引用原文的话如下: > T 港控/mmm°/ 2022年01月20日 03:55/ 0 赞/ 283 阅读
相关 发布订阅模式(观察者模式) 设计模式的目的就是使类成为可复用的组件。 在观察者模式中观察者接口只注重被观察者,而被观察者接口只注重观察者,具体是观察者接口实现类中的哪一个并不在意,而被观察者也是如此。这 清疚/ 2021年12月15日 00:27/ 0 赞/ 292 阅读
还没有评论,来说两句吧...