设计模式-观察者模式
2017-07-27 22:12
92 查看
1.定义:观察者模式又被称为发布-订阅模式,它描述对象间一对多的依赖关系,即当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。
2.实例,背景:买房者对于某售房处房屋信息的关注,通过观察者模式实现及时获得房屋信息。
3.优点:时间解耦和对象之间解耦;缺点:消耗一定的时间和内存,追踪问题增加难度(因为对象之间的联系深埋在背后)
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.优点:时间解耦和对象之间解耦;缺点:消耗一定的时间和内存,追踪问题增加难度(因为对象之间的联系深埋在背后)
相关文章推荐
- Java设计模式——观察者模式(Observer Pattern)
- UIday1701:KVO观察者设计模式 代码
- 设计模式:观察者模式
- .NET简谈设计模式之(观察者模式)
- 设计模式-----观察者模式
- PHP设计模式之观察者模式
- java设计模式(1)观察者模式
- 设计模式 篇 单子模式 门面模式 适配器 工厂模式 观察者模式 命令者模式 装饰者模式 代理模式 简单讲解
- 设计模式(7)——观察者模式
- 实现观察者模式设计方案
- 设计模式之观察者模式
- 设计模式之观察者模式
- 设计模式之二:观察者模式
- 设计模式之观察者模式
- 观察者设计模式
- 设计模式-Observer(观察者模式)
- java设计模式之观察者模式
- 《HeadFirst 设计模式》之观察者模式
- 设计模式之观察者模式
- 【设计模式】observer观察者模式:模拟java.awt.Button事件监听。