1、实现发布--订阅模式
(1)首先要指定好谁充当发布者
(2)然后给发布者添加一个缓存列表,用于存放回调函数以便通知订阅者(记录客户的花名册)
(3)最后发布消息的时候,发布者遍历这个缓存列表,依次触发里面订阅者回调函数(遍历花名册,挨个发短信)
另外,我们可以在回调函数填入一些参数,订阅者可以接受这些参数,这是很有必要的,如加入房子的单价、面积信息。订阅者得到这些信息可以自行处理。
var saleOffices = {} // 售楼处 发布者

saleOffices.clientList = [] //  缓存列表 存放订阅者的回调函数
saleOffices.listen = function(fn) { // 添加订阅者
  this.clientList.push(fn) // 订阅者的消息添加进缓存列表
}
saleOffices.trigger = function() { // 发布信息
  for(let i = 0, fn; fn=this.clientList[i++];) {
    fn.apply(this, arguments);
  }
}
saleOffices.listen(function(price, squareMeter) {
  console.log('price='+price)
  console.log('squareMeter='+squareMeter)
})
saleOffices.listen(function(price, squareMeter) {
  console.log('price='+price)
  console.log('squareMeter='+squareMeter)
})
saleOffices.trigger(2000000, 100)
saleOffices.trigger(199998, 100)

打印结果:price=2000000

squareMeter=100
price=2000000
squareMeter=100
price=199998
squareMeter=100
price=199998
squareMeter=100
这里可以看到,每个订阅者都收到两个房价的信息。


breathfish
43 声望2 粉丝