发布-订阅模式
发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。在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模块的对象') } } })()
优点
-
时间上解耦
-
对象之间解耦
缺点
-
创建订阅者要消耗一定的时间和内存,当你订阅一个消息后,也许此消息最后都未发生,但这个订阅者会始终存在于内存中