设计模式-观察者模式
来源:互联网 发布:origin 矩阵 编辑:程序博客网 时间:2024/06/18 11:26
1.定义:观察者模式又被称为发布-订阅模式,它描述对象间一对多的依赖关系,即当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。
2.实例,背景:买房者对于某售房处房屋信息的关注,通过观察者模式实现及时获得房屋信息。
//通用观察者模式功能var event = { clientList:{},//买房者关注的房屋信息列表 listen:function(key,fn){//关注的房屋信息注册 if(!this.clientList[key]){ this.clientList[key] = []; } this.clientList[key].push(fn); }, trigger:function(){//通知买房者房屋信息 var key = Array.prototype.shift.call(arguments), fns = this.clientList[key]; if(!fns || fns.length === 0){ return false; } for(var i=0,fn;fn = fns[ i++ ];){ fn.apply(this,arguments);//arguments是trigger时带上的参数 } }, remove:function(key,fn){//取消关注的房屋信息 var fns = this.clientList[key]; if(!fns){ return false; } if(!fn){ fns && (fns.length = 0); }else{ for(var l = fns.length-1;l >=0;l--){ var _fn = fns[l]; if(_fn === fn){ fns.splice(l,1); } } } }};//定义给对象安装观察者模式功能的方法var installEvent = function(obj){ for(var i in event){ obj[i] = event[i]; }};//使用观察者功能var salesOffices = {};//售楼处对象installEvent(salesOffices);salesOffices.listen('squareMeter88',function(price){ console.log('价格='+price);});salesOffices.trigger('squareMeter88',20000000);salesOffices.remove('squareMeter88');//删除关于88平方的房屋信息
3.优点:时间解耦和对象之间解耦;缺点:消耗一定的时间和内存,追踪问题增加难度(因为对象之间的联系深埋在背后)
阅读全文
0 0
- 模式设计:观察者模式
- 设计模式-----观察者模式
- 设计模式-观察者模式
- 设计模式--观察者模式
- 设计模式:观察者模式
- 设计模式-----观察者模式
- 设计模式:观察者模式
- 设计模式-观察者模式
- 设计模式 观察者模式
- 设计模式-观察者模式
- 设计模式-【观察者模式】
- 设计模式-观察者模式
- 设计模式 -- 观察者模式
- 设计模式-观察者模式
- 【设计模式】观察者模式
- 设计模式- 观察者模式
- 设计模式- 观察者模式
- 设计模式--观察者模式
- 传统图像处理的一些特征
- 操作系统中的内存管理
- (贪心)Codeforces Round #402 C. Dishonest Sellers
- Tensorflow入门-基础20170727
- Object,Map,List,Array转为Json格式
- 设计模式-观察者模式
- Po_python_lesson10_通信_2017/7/27
- bzoj1831: [AHOI2008]逆序对
- Lucene中的异常
- YaHoo Web优化的14条法则
- Regular polygon 数学几何
- 洛谷P1036 选数
- html&JavaScript&innerHTML演练(计算器):利用jQuery简化代码
- PAT1057. 数零壹