JS的监听模式与观察者模式

监听模式的代码示例
// 事件对象  
var Event = function(obj) {  
    this.obj = obj;  
    this.getSource = function() {  
        return this.obj;  
    }  
}  
  
// 监听对象  
var F2 = function() {  
    this.hander = function(event) {  
        var f1 = event.getSource();  
        console.log("f2 do something!");  
        f1.callback();  
    }  
}  
  
// 被监听对象  
var F1 = function() {  
    this.abc = function() {  
        console.log("f1 do something one!");  
        // 创建事件对象  
        var e = new Event(this);  
        // 发布事件  
        this.f2.hander(e);  
        console.log("f1 do something two!");  
    }  
      
    this.on = function(f2) {  
       this.f2 = f2;  
    }  
      
    this.callback = function() {  
       console.log("f1 callback invoke!");  
    }  
}  
  
// 主函数  
function main() {  
    var f1 = new F1();  
    var f2 = new F2();  
    // 加入监听  
    f1.on(f2);  
    f1.abc();  
}  
  
// 运行主函数  
main();  
观察者模式的代码示例
// 观察者对象1  
var F2 = function() {  
    this.update = function(observable, obj) {  
        console.log("f2 do something!");  
        for (var i=0, len=obj.length; i<len; i++) {  
            console.log(obj[i]);  
        }  
        observable.callback();  
    }  
}  
  
// 观察者对象2  
var F3 = function() {  
    this.update = function(observable, obj) {  
        console.log("f3 do something!");  
        for (var i=0, len=obj.length; i<len; i++) {  
            console.log(obj[i]);  
        }  
        observable.callback();  
    }  
}  
  
// 被观察对象  
var F1 = function() {  
    // 保存所有观察者  
    var observers = [];  
      
    this.abc = function() {  
        console.log("f1 do something one!");  
        var datas = ["苹果", "桃子", "香蕉"];  
        // 通知所有观察者  
        this.notifyObservers(datas);  
        console.log("f1 do something two!");  
    }  
      
    this.addObserver = function(observer) {  
       observers.push(observer)  
    }  
      
    this.callback = function() {  
       console.log("f1 callback invoke!");  
    }  
      
    this.notifyObservers = function(arg){  
        if (observers.length == 0) {  
           return;  
        };  
        for (var i = 0, len = observers.length; i < len; i++) {  
            observers[i].update(this, arg);  
        }  
    }  
}  
  
// 主函数  
function main() {  
    var f1 = new F1();  
    var f2 = new F2();  
    var f3 = new F3();  
    // 加入观察者  
    f1.addObserver(f2);  
    f1.addObserver(f3);  
    f1.abc();  
}  
  
// 运行主函数  
main();  

参考来源:https://www.iteye.com/blog/redhacker-1756436

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值