百良西瓜

导航

JavaScript 设计模式 - 单例模式

单例模式

  用于保存全局变量,减少内存使用等

  [实现代码]

  var MyNameSpace = {};
  MyNameSpace.Singleton = (function() {
    // private members
    var privateAttribute = false;

    // private functions
    function privateMethod1() {
      ...
    }

    return {
      // public members
      publicAttribute1: true,
      publicAttribute2: 12,
      publicMethod: function() {
        ...
      }
    };
  })();

  有时候,使用以上方式的代码时,碰到类里面需要加载大量资源时,这种方式就会变得非常缓慢。

  如果想等到使用单例对象的时候再加载,岂不是更好?这时候,就可以使用 "惰性加载" 方式解决。

// lazy loading singleton
MyNameSpace.Singleton = (function() {

  // 把前面实现方式的代码统统放进这个 constructor 函数中,名字可任意起
  function constructor() {
    // private members
    var privateAttribute = false;

    // private functions
    function privateMethod1() {
      ...
    }

    return {
      // public members
      publicAttribute1: true,
      publicAttribute2: 12,
      publicMethod: function() {
        ...
      }
    };
  }
  // 声明一个单例检测对象
  var uniqueObj = null;

  return {
    // 对单例对象暴露的唯一方法
    getInstance: function() {
      if(!uniqueObj) {
        uniqueObj = constructor();
      }

      return uniqueObj;
    }
  };
})();

 

posted on 2015-12-17 04:49  百良西瓜  阅读(110)  评论(0编辑  收藏  举报