code设计模式-观察者模式

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.优点:时间解耦和对象之间解耦;缺点:消耗一定的时间和内存,追踪问题增加难度(因为对象之间的联系深埋在背后)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wl_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值