JS 设计模式-发布订阅与观察者模式

JS 设计模式之发布订阅模式

	// 发布/订阅模式
	function EventEmit(){
	  this._arr = [];
	}
	// 订阅
	EventEmit.prototype.on = function(callBack){
	  this._arr.push(callBack)
	}
	// 取消订阅
	EventEmit.prototype.unon = function(callBack){
	  this._arr.filter(fn=>{
	    if(fn !== callBack){
	      return fn;
	    }
	  })
	}
	// 发布
	EventEmit.prototype.emit = function(){
	  this._arr.forEach(fn=>fn.apply(this, arguments))
	}
	
	let fn = new EventEmit();
	let obj = {};
	
	fn.on(function(data,key){
	  obj[key] = data;
	  if(Object.keys(obj).length==2){
	    console.log(obj)
	  }
	})
	
	fn.emit('张三', 'name' )
	fn.emit(18,'age')

JS 设计模式之观察者模式

	// 被观察者/服务
	class Serve {
	  constructor(){
	    this._arr = []
	  }
	  attch(callBack){
	    this._arr.push(callBack)
	  }
	  setState(val){
	    this._arr.forEach(fn=>{
	      fn.update(val)
	    })
	  }
	}
	
	// 观察者
	class Observe {
	  constructor(props){
	    this.state = props;
	  }
	  update(val){
	    console.log('name-',this.state, 'datra-',val)
	  }
	}
	
	// 新建观察者
	let o1 = new Observe('name1')
	let o2 = new Observe('name2')
	
	// 新建服务
	let server = new Serve();
	
	// 为服务添加观察者;
	server.attch(o1) // name- name1 datra- asdfasd
	server.attch(o2) // name- name2 datra- asdfasd
	
	// 服务运行观察者记录到
	server.setState('asdfasd')

发布/订阅模式和观察者模式的区别在于:

发布订阅模式是发布和订阅相互独立的,耦合度较松;
观察者模式是将观察者耦合到服务内部,消息触发之后会通知/执行观察者的操作;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值