基于JavaScript实现单例模式

首先,了解一下什么是单例模式,这里我直接把菜鸟教程中的定义给copy过来:

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

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

注意:

1、单例类只能有一个实例。

2、单例类必须自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

用一句话来总结就是:在单例模式中,一个类仅有一个实例,并提供一个访问它的全局访问点。这无非是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象,在JavaScript我们很自然而然就会想到用闭包来解决这个问题。

比如说需要生成一个页面登录框,因为有且只可能有一个登录框,那么你就可以用单例的思想去实现他,代码如下:

let createLoginWindow = function(title) {
  this.title= title;
  this.init();
}

createLoginWindow.prototype.init = function() {
  // some code
  
}
let proxySingleton = (function() {
  var instance;
  return function(title) {
    if (!instance) {
      instance = new createLoginWindow(title);
    }
    return instance;
  }
})();
let windowA = new proxySingleton('login1');
let windowB = new proxySingleton('login2');

console.log(windowA === windowB); // true

可以看到,上述代码中createLoginWindow负责构造对象,然后通过代理proxySingleton来判断是构造新的对象还是返回已有对象。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.duanlonglong.com/qdjy/1016.html