欢迎来到天天文库
浏览记录
ID:27568339
大小:67.50 KB
页数:13页
时间:2018-12-04
《javascript设计模式之观察者模式(推荐)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Javascript设计模式之观察者模式(推荐)观察者模式有时也称为发布--订阅模式,在观察者模式中,有一个观察者可以管理所有的目标,等到有状态发生改变的时候发出通知1.什么是观察者模式观察者模式有时也称为发布--订阅模式,在观察者模式中,有一个观察者可以管理所有的目标,等到有状态发生改变的时候发出通知。(其实sqlserver中的发布订阅也是这个道理)2.通俗解释假如以前村里的广播是一个观察者,那么每个村民就是被观察对象,如果村子里有通知,政策发生改变的时候,就需要通过广播把这个消息发布出去,而不用直接一家家的跑去发通知。3.代码
2、It;!D0CTYPEhtmlgt:nbsp;It:htmllang="en"gt;nbspIt:headgt:nbsp;It;metacharset=UTF-8gt;nbsp;It;titlegt;观察者模式It;/titlegt;nbspIt:bodygt;nbsp;It;scriptgt;nbsp;varobserver二{//观察者nbsp;villagers:[],//才寸名nbsp;addVillager:function(callback){//增加村名nbsp;this.villagers[this.villager
3、s.length]=callback;nbsp:},nbsp;removeVillager:function(callback){//移除村名nbsp;for(vari=0;ilt;this,villagers.1ength;i++){nbsp;if(this.villagers[i]===callback){nbsp;deletethis.villagers[i]:nbsp;}nbsp;}nbsp;},nbsp;publish:function(info){//发布信息nbsp;for(vari=0:ilt;this.villag
4、ers.length;i++){nbsp;if(typeofthis.villagers[i]===’function’){nbsp;this.villagers[i](info);nbsp;}nbsp:}nbsp;},nbsp;make:function(o){//这里将村子建一个这种广播方式nbsp;for(variinthis){nbsp;o[i]=this[i];nbsp;}nbsp;}nbsp;};nbsp;varvillagel={};nbsp;observer.make(villagel);//将村子1建立这种观者模式
5、nbsp;varvillagerll={nbsp;read:funotion(what){nbsp:console.logC我是第一个村子的第一个村名’+what):nbsp;}nbsp;}:nbsp;varvillagerl2={nbsp;read:function(what){nbsp;console.Iog(’我是第一个村子的第二个村名:’+wha}nbsp;}:nbsp;villagel.addVi1lager(vi11ager11.read):nbsp;villagel.addVillager(villagerl2.rea
6、d):nbsp:villagel.publish(’大家来开会呀!!!’):nbsp;villagel.removeVillager(villagerll.read):nbsp:villagel.publishC大家来开会呀!!!’):nbsp;/氺varvillage2={nbsp;myAddVillager:function(callback){nbsp;this.addVillager(callback):nbsp;},nbsp;myRemoveVillager:function(callback){nbsp;this,rem
7、oveVillager(callback):nbsp;},nbsp;myPub1ish:function(info){nbsp;this,publish(info):nbsp:}nbsp:}:nbsp;observer.make(village2);//将村子1建立这种观察者模式nbsp;varvillager21={nbsp:read:function(what){nbsp;console.log(’我是第二个村子的第一个村名:’+what):nbsp;}nbsp;};nbsp;varvillager22={nbsp;read:f
8、unction(what){nbsp;console.log(’我是第二个村子的第二个村名:’+what):nbsp;}nbsp;}:nbsp;village2.myAddVillager(villager21.read);nbsp;
此文档下载收益归作者所有