设计模式

单例模式

/**
 * 保证一个类仅有一个实例,并提供一个访问它的全局访问点
 * @param {*} fn 
 */
const getSingleton = function (fn) {
  const result
  return function () {
    return result || (result = fn.apply(this, arguments))
  }
}

export default getSingleton

发布订阅模式


/**
 * 又称为观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生
 * 改变的时,所有依赖于它的对象都将得到通知。一为时间上解耦,二为对象之间的解
 * 耦
 */
const pubsub = (function () {
  const pools = [],
    pub,
    sub,
    del
  sub = (key, fn) => {
    if (!pools[key]) {
      pools[key] = []
    }
    pools[key].push(fn)
  }
  pub = () => {
    let _key = Array.prototype.shift.call(arguments)
    let _fns = pools[_key]
    if (!_fns || _fns.length === 0) {
      return false
    }
    for (let _fnl = _fns.length - 1; _fnl >= 0; _fnl--) {
      _fns[_fnl].apply(this, Array.prototype.slice.call(arguments, 1))
    }
  }
  del = (key, fn) => {
    let _fns = pools[key]
    if (!_fns || _fns.length === 0) {
      return false
    }
    if (!fn || typeof (fn) !== 'function') {
      _fns.length = 0
    }
    for (let _fnl = _fns.length - 1; _fnl >= 0; _fnl--) {
      if (_fns[_fnl] === fn) {
        _fns.splice(_fnl, 1)
      }
    }
  }
  return {
    pub,
    sub,
    del
  }
})()

export default pubsub

策略模式

/**
 * 定义一系列的算法,把它们一个个的封装起来,并且使它们可以相互替换。目的就是算法的使用和算法的实现分离出来
 */
const strategy = {
  A(value) {
    return value.toString(8)
  },
  B(value) {
    return value.toString(10)
  }
}

export default strategy
Top