//定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变的时候,所有依赖于他的对象都得到通知并自动刷新
// 观察者放在闭包,页面加载就立即执行
var Observer = (function(){
//消息队列私有
var _message = {};
return {
//注册信息
regist:function(type,fn){//一种类型对应多个模块注册的执行函数if(typeof _message[type] === "undefined"){ _message[type] = [fn];}else{ _message[type].push(fn);}
},
//发布信息
fire:function(type,args){if(!_message[type]){ return;}var events = { type:type, args:args || {}};var i = 0;var len = _message[type].length;for(; i<len;i++){ //依次执行注册的消息对应的执行函数 _message[type][i].call(this, event);}
},
//移除信息
remove:function(type,fn){if(_message[type] instanceof Array){ var i = _message[type].length - 1; for(; i>0;i--){ _message[type][i] === fn && _message[type].splice(i,1); }}
}
}
})();
var Student = function(result){
var that = this;
that.result = result;
that.say = function(){
console.log(that.result);
}
}
Student.prototype.choose = function(course){
Observer.regist(course,this.say);
}
Student.prototype.unchoose = function(course){
console.log(this.result + " " + course + "已经退选");
Observer.remove(course,this.say);
}
var Teacher = function(){}
Teacher.prototype.ask = function(question){
console.log("谁选了:" + question);
Observer.fire(question);
}
var student1 = new Student("学生1选修");
var student2 = new Student("学生2选修");
var student3 = new Student("学生3选修");
student1.choose("数学");
student1.choose("历史");
student2.choose("计算机");
student3.choose("数学");
student3.choose("历史");
student3.unchoose("历史");
var teacher = new Teacher();
teacher.ask("数学");
teacher.ask("历史");

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: 设计模式JavaScriptJava
分页:12
转载请注明
本文标题:设计模式之观察者模式 设计模式 观察者模式 JavaScript JavaScript教程
本站链接:http://www.codesec.net/view/522969.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(34)