设计模式 - 单例模式

122 阅读1分钟

单例模式

单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

let Singlton = function (name: string) {
  this.name = name;
};


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

let ProxyCreateSingleton:typeof Singlton = (function () {
  let instance = null;
  return function (name: string) {
    if (instance) {
      return instance
    }
    return instance = new Singlton(name);
  }
})();

let bob = new ProxyCreateSingleton("bob");
console.log(bob.getName());   // "bob"

let lili = new ProxyCreateSingleton("lili");
console.log(lili.getName());  // "bob"

优点

  1. 内存中只有一个实例,减少内存开销,尤其是经常创建和销毁的实例
  2. 避免对资源的多重占用

缺点

  1. 没有接口,不能继承。

jQuery 也是单例模式,只是使用的方法是将 实例挂载到全局变量中,不过这会造成全局污染。

(function () {
  var jquery = (function () { })();
  window.jQuery = window.$ = jQuery;
;})(window);

单例模式的实现方法有很多,主要宗旨就是同时只允许有一个实例存在。