观察者模式
目标
模块间共同依赖一个属性做实时通信
应用场景
响应式
代码实现
这是一种一对多的关系,假设有一个下拉选择的选项分别为a、b、c、d,当其下拉值为c时,页面的button按钮要置灰,p标签的内容要加粗,strong标签的在同时符合type=1时内容要显示为正常
发布订阅模式
目标
将观察者与目标解耦,做进一步控制
应用场景
eventBus、公众号的消息订阅、vue响应式
代码实现
在观察者模式中,我们让目标对象去向观察者发布更新通知,让观察者去订阅了目标,这让两者高度耦合且当目标对象值发生改变时必须实时通知到每一个订阅者。这是不合理的,因为当type不为1的时候是不需要通知strong的
因此,在发布订阅者中,我们使用事件中心来进行消息调度,目标对象向事件中心发布更新通知,事件中心根据接收的更新通知向订阅者发布更新。当type不为1时直接忽略strong
除此之外,eventBus也是一个典型的发布订阅模式