Skip to content

实现

javascript
const Singleton = function (name) {
  this.name = name
}

Singleton.prototype.getName = function () {
  console.log(this.name)
}

Singleton.getInstance = (function () {
  let instance = null

  return function (name) {
    if (!instance) {
      instance = new Singleton(name)
    }

    return instance
  }
})()

const instance1 = Singleton.getInstance('foo')
const instance2 = Singleton.getInstance('bar')
instance1 === instance2 // output: true

通过 Singleton.getInstance 来获取 Singleton 类的唯一实例,但使用者必须知道这是一个 单例类,增加了这个类的 ”不透明性“。