用javascript实现一个 Subscribe/Publish 模式,有什么特别的思路没有
这是一个简单的观察者模式的JS代码:
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 || {}
},
i = 0;
len = __message[type].length;
for(; i < len; i++){
__message[type][i].call(this, events);
}
},
//移除信息接口
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.answer = function(question){
Observer.regist(question,this.say);
}
Student.prototype.sleep = function(question){
console.log(this.result + "" + question + "已被注销")
Observer.remove(question, 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.answer('什么是设计模式');
student1.answer('简述观察者模式');
student2.answer('什么是设计模式');
student3.answer('什么是设计模式');
student3.answer('简述观察者模式');
student3.sleep('简述观察者模式');
var teacher = new Teacher();
teacher.ask('什么是设计模式');
teacher.ask('简述观察者模式');
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
3 回答868 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决