观察者模式方法
   1.称之为消息机制或发布-订阅者模式
   2.定义了一种依赖关系解决了主体对象与观察者之间功能的耦合

观察者方法

        //将观察者放在闭包中,当页面加载就立即执行
var Observer = (function(){
var _messages = {};
return {
//注册信息接口
regist : 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 events = {
type : type,
args : args || {}
},
i=,
len = _messages[type].length;//消息动作长度
//遍历消息动作
for(;i<len;i++){
//依次执行注册的消息对应的动作序列
_messages[type][i].call(this,events);
}
},
//移除信息接口
remove : function(type,fn){
if(_messages[type] instanceof Array){
//从最后一个消息动作遍历
var i = _messages[type].length - ;
for(; i >=; i--){
//如果存在该动作则在消息动作序列中移除相应动作
_messages[type][i] === fn && _messages[type].splice(i,);
}
}
}
}
})();

对象间解耦:用在课堂上老师提问学生的例子说明一下

学生类Student:

            var Student = function(result){
var that=this;
that.result=result;
that.say=function(){
console.log(that.result);
}
}
Student.prototype.answer = function(question){
Observer.regist(question,this.say);//注册,接收到问题
}
Student.prototype.sleep = function(question){
Observer.remove(question,this.say);//移除,接收到问题,没有回答
}

老师类Teacher

            var Teacher = function(){};
Teacher.prototype.ask =function(question){
console.log('问题是:'+question);
Observer.fire(question);//问学生问题
}

实例化三个学生(订阅者)

             //实例化三个学生(订阅者)
var stu1=new Student("学生1回答什么是设计模式答案");
var stu2=new Student("学生2回答什么是设计模式答案")
var stu3=new Student("学生3回答简述观察者模式答案")

监听到老师的问题(订阅者监听发送者发送的信息)

             stu1.answer("什么是设计模式");
stu2.answer("什么是设计模式");
stu3.answer("简述观察者模式");

没有回答老师的问题(移除监听到发送者发送的信息)

             //没有回答老师的问题(移除监听到发送者发送的信息)
stu2.sleep("什么是设计模式");

实例化一个老师(发布者)

1             //实例化一个老师(发布者)
var teacher=new Teacher();

提问两个问题(把信息发送给学生)

             //提问两个问题(把信息发送给学生)
teacher.ask("什么是设计模式");
teacher.ask("简述观察者模式");

控制台显示结果

javascript-观察者模式的更多相关文章

  1. 轻松掌握:JavaScript观察者模式

    观察者模式 观察者模式也叫"订阅者/发布者"模式,定义对象间的一种一对多的依赖关系,发布者可以向所有订阅者发布消息. 观察者模式被广泛地应用于JavaScript客户端编程中.所有 ...

  2. JavaScript观察者模式

    观察者模式观察者模式又叫发布订阅模式(Publish/Subscribe),它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生变化时就会通知所有的观察者对象,使得 ...

  3. 理解javascript观察者模式(订阅者与发布者)

    什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...

  4. Javascript观察者模式(Object.defineProperty、Reflect和Proxy实现)

    什么是观察者模式? 答:在数据发生改变时,对应的处理函数自动执行.函数自动观察数据对象,一旦对象有变化,函数就会自动执行. 参考<原生JavaScript实现观察者模式>(https:// ...

  5. 《JavaScript 模式》知识点小抄本(下)

    介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...

  6. JavaScript实现的发布/订阅(Pub/Sub)模式

    JavaScript实现的发布/订阅(Pub/Sub)模式 时间 2016-05-02 18:47:58  GiantMing's blog 原文  http://giantming.net/java ...

  7. 收藏的js学习小例子

    1.js模拟java里的Map function Map(){ var obj = {} ; this.put = function(key , value){ obj[key] = value ; ...

  8. observeMode

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...

  9. js设计模式之发布订阅模式

    1. 定义 发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知. 订阅者(Subscriber)把自己想订阅的事件注册(Subscri ...

  10. javascript 设计模式-----观察者模式

    观察者模式在设计模式中被重点提到,因为它应用的场景非常多,而且在模块化设计当中扮演着非常重要的角色.MVC模式中最底层的就是观察者模式,当下流行的javascript框架backbone就是很好地运用 ...

随机推荐

  1. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  2. Asp.Net 使用Npoi导出Excel

    引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...

  3. wordpress上传图片时重命名--修改插件时遇到的一些问题

    wordpress是用php语言开发的博客平台,它扩展性强,容易扩展,很适合拿来做二次开发. 1,问题由来 本周五,我在浏览公司的网站(基于wordpress开发)时发现,网站首页上有两篇文章的缩略图 ...

  4. ime-mode:disabled 关闭文本框输入法

    在用户输入数字的表单中,需要禁止用户输入中文.符号等,减少用户输入出错误的可能性,CSS可以实现此功能. ime-mode的语法解释如下: ime-mode : auto | active | ina ...

  5. PHP CURL CURLOPT参数说明(curl_setopt)

    CURLOPT_RETURNTRANSFER 选项: curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 如果成功只将结果返回,不自动输出任何内容. 如果失败返回F ...

  6. Sql Server函数全解(四)日期和时间函数

      日期和时间函数主要用来处理日期和时间值,本篇主要介绍各种日期和时间函数的功能和用法,一般的日期函数除了使用date类型的参数外,也可以使用datetime类型的参数,但会忽略这些值的时间部分.相同 ...

  7. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  8. [Web API] Web API 2 深入系列(5) 特性路由

    目录 1. 特性路由注册 2. 路由解析 - 生成DataTokens - 选择HttpController - 选择Action 特性路由的目的在于更好的提供restful架构的接口,最近好忙(懒) ...

  9. Solr3.6.1 在Tomcat6下的环境搭建

    Solr3.6.1 在Tomcat6下的环境搭建 Tomcat路径:D:\prg\apache-tomcat-6-solr 简写为tomcat_home Solr文件下载保存路径为:F:\softwa ...

  10. IBC编程社区

    IBC编程社区-.NET编程交流论坛 官方地址:http://www.ibcibc.com 新浪微博:IBC编程社区 微信公众号:ibcbcsq QQ一群:235371874(已满) QQ二群:248 ...