5、发布-订阅模式

发布-订阅模式

发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。在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模块的对象')
     }
   }
 })()

优点

  • 时间上解耦

  • 对象之间解耦

缺点

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
发布-订阅模式(Publish-Subscribe Pattern)具有以下特点和优势: 1. 解耦性:通过发布-订阅模式发布者和订阅者之间的关系被解耦。发布者不需要知道谁是订阅者,订阅者也不需要知道谁是发布者。这种解耦性使得系统中的组件可以独立地进行修改、扩展和重用。 2. 异步通信:发布-订阅模式通常采用异步通信方式,即发布者和订阅者之间不需要直接交互。这样可以提高系统的性能和响应速度,因为发布者不需要等待所有订阅者都处理完消息后才能继续执行。 3. 扩展性:发布-订阅模式支持动态添加和移除订阅者,以及新增主题和取消主题订阅的灵活性。这使得系统可以方便地进行扩展和改进,而不需要对已有的组件进行修改。 4. 消息传递机制:发布-订阅模式提供了一种灵活的消息传递机制。发布者可以将消息发送到指定的主题上,而订阅者可以选择订阅感兴趣的主题。这种机制使得系统中的不同组件可以通过消息进行通信,实现松耦合的架构。 5. 可靠性:发布-订阅模式可以提高系统的可靠性。当一个订阅者出现故障或无法处理消息时,不会影响其他订阅者的正常运行。系统可以容错地处理故障,确保消息的可靠传递。 6. 多对多通信:发布-订阅模式支持多对多的通信。一个发布者可以有多个订阅者,一个订阅者也可以订阅多个主题。这种多对多的通信方式能够满足复杂系统中不同组件之间的通信需求。 综上所述,发布-订阅模式具有解耦性、异步通信、扩展性、消息传递机制、可靠性和多对多通信等特点和优势,适用于需要实现解耦和异步通信的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值