Skip to content

用代理实现单例模式

javascript
const createDiv = function (html) {
  this.html = html
  this.init()
}

createDiv.prototype.init = function () {
  const div = document.createElement('div')
  div.innerHTML = this.html
  document.body.appendChild(div)
}

const ProxyCreateDiv = (function () {
  let instance = null

  return function (html) {
    if (!instance) {
      instance = new createDiv(html)
    }

    return instance
  }
})()

const div1 = new ProxyCreateDiv('foo')
const div2 = new ProxyCreateDiv('bar')
div1 === div2 // output: true

通过引入代理类的方式,我们同样完成了一个单例模式的编写,跟之前不同的是,现在我们把负责 管理单例的逻辑移到了代理类 ProxyCreateDiv 中。这样一来,CreateDiv 就变成了一个普通的 类,它跟 ProxyCreateDiv 组合起来可以达到单例模式的效果。