javascript观察者模式简述

观察者模式又称发布订阅模式publish-subscribe,是存在普遍存在与js和大多数语言的一种消息机制。js的事件机制就是发布订阅模式,从而实现异步。

In software architecture, publish–subscribe is a messaging pattern where senders of messages, called publishers, do not program the messages to be sent directly to specific receivers, called subscribers, but instead categorize published messages into classes without knowledge of which subscribers, if any, there may be.

简单的实现如下

const _ = window._ //lodash
let Event = (function () {
  let p = {}
  let usid = -1
  let topics = {}
  p.publish = function (topic, args) {//发布
    if (!topics[topic]) { return }
    let sub = topics[topic]
    for (let i = 0; i < sub.length; i++) {
      sub[i].func(args, topic)
    }
    return this
  }
  p.subscribe = function (topic, func) {//订阅
    topics[topic] = topics[topic] || []
    let token = ++usid
    let sub = topics[topic]
    sub.push({
      token,
      func
    })
    return token
  }
  p.unsubscribe = function (topic, token) {//取消订阅
    if (!topics[topic]) { return }
    let sub = topics[topic]
    _.remove(sub, (n) => n.token === token)
    if (sub.length === 0) {
      delete topics[topic]
    }
    return this
  }
  return p
})()

export default Event

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 破烂旧什尚卖无? 随遇 破烂旧什尚卖无?三轮脚踏力嘶呼。 循声而去忙寻第...
    大岗山阅读 910评论 0 1
  • 大家公认同事李小毛已经“拖延症”晚期没救了。 什么叫拖延症?我白特意...
    刘高莉娟阅读 858评论 0 5