5、发布-订阅模式

本文介绍了发布-订阅模式,也称为观察者模式,用于在对象间建立一对多的关系,当发布者状态变化时,所有订阅者都会收到通知。在JavaScript中,事件模型常用于实现这一模式。举例说明了在商城网站中,如何通过登录成功事件来同步更新header、nav、消息列表和购物车等模块的用户信息。该模式的优点包括时间上的解耦和对象间的解耦,但同时也存在内存消耗的问题,因为即使消息未触发,订阅者也会一直存在。

发布-订阅模式

发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。在JavaScript中,我们一般用事件模型来代替传统的发布-订阅模式

例子:开发一个商城网站,网站里有header头部、nav导航、消息列表、购物车等模块,这几个模块都必须先用ajax异步请求获取用户的登录信息。

 // 作为中介者,把订阅者和发布者联系起来
 login.succ(function(data){
   header.setAvatar(data.avatar) // 设置header模块的头像
   nav.setAvatar(data.avatar) // 设置导航模块的头像
   message.refresh() // 刷新消息列表
   cart.refresh() // 刷新购物车列表
 })
 ​
 $.ajax('http://xxx.com?login',function(data){ // 登录成功
   login.trigger('loginSucc',data) // 发布登录成功的消息
 })
 ​
 var header = (function(){
   login.listen('loginSucc',function(data){
     header.setAvatar(data.avatar)
   });
   return {
     setAvator:function(data){
       console.log('设置header模块的对象')
     }
   }
 })()
 ​
 var nav = (function(){
   login.listen('loginSucc',function(data){
     nav.setAvatar(data.avatar)
   })
   return {
     setAvatar:function(avatar){
       console.log('设置nav模块的对象')
     }
   }
 })()

优点

  • 时间上解耦

  • 对象之间解耦

缺点

  • 创建订阅者要消耗一定的时间和内存,当你订阅一个消息后,也许此消息最后都未发生,但这个订阅者会始终存在于内存中

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值