美文网首页
JS pattern之Singleton pattern

JS pattern之Singleton pattern

作者: ifcode | 来源:发表于2014-05-29 15:19 被阅读181次

    所谓singleton pattern,就是指程序中任何时候只存该object的一个instance。 如果每次创建一个新的instance只为了使用同样的功能,就该考虑采用singleton pattern了。比如数据库连接处理,或是前端的ajax请求等每次都一样的对象,采用Singleton模式不仅使代码简洁清晰,也减少了创建对象的开销。

    一个具体的例子:

    var obj1 = new Singleton();
    var obj2 = new Singleton();
    obj1 === obj2; // true
    obj1.test = 1;
    obj2.test; // => 1
    

    obj1和obj2分别新建了一个Singleton的对象实例,但实际上他们指向的是同一个对象实例。也说明了无论何时,系统中只会存在Singleton对象的一个实例。

    实现Singleton的方式非常多,最简单的如不采用constructor的话,object literal也算是Singleton。下面这种方式是我认为比较优秀的实现,不仅简洁可读,也适用于strict模式。

    var Singleton = function(){
      
      if (Singleton.prototype._singletonInstance) {
        return Singleton.prototype._singletonInstance;
      }
      
      Singleton.prototype._singletonInstance = this;  // first instance obect
      
      this.test = 1;
      
    };
    

    这里的要点是在prototype上加上一个共享属性,指向第一个调用constructor的instance。以后再调用constructor的时候,就不再生成新的实例,而是返回先前创建的实例了。

    相关文章

      网友评论

          本文标题:JS pattern之Singleton pattern

          本文链接:https://www.haomeiwen.com/subject/jrpdtttx.html