JavaScript设计模式(二)之单例模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013205165/article/details/90723478

一、单例模式的定义

单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建后再返回,这就确保了一个类只有一个实例对象。在JavaScript里,单例作为一个命名空间的提供者,从全局命名空间里提供一个唯一的访问点来访问该对象。

二、单例模式的作用

作用:

  • 模块间通讯。
  • 系统中某个类的对象只能存在一个。
  • 保护自己的属性和方法。

注意事项:

  • 注意this的使用。
  • 闭包容易造成内存泄漏,不需要的赶快干掉。
  • 注意new的成本。(继承)

三、单例模式的简单分类

主要分为:

  • 简单单例
  • 具有局部变量的特殊单例
  • 惰性单体
  • 分支单体
/**
 * 普通单体
 * 比如:用户登录之后的信息可以用一个单体存储
 */
(function(){

  // 用来区分命名空间,并且将一组相关的属性和方法组织到一起
  var UserInfo = {
    name: 'admin',
    code:'00101',
    deptName: 'pd',
    deptCode: 'PD001',
    getName: function() {
      return 'admin'
    }
  };

  alert(UserInfo.getName())
})()


/**
 * 具有局部属性的特殊单体
 */
(function() {
  var UserInfo = (function(){
    // 利用闭包使单体有自己的私有局部变量
    var name = "";
    var code = "";
    // 请求后台数据获取属性值
    ajax
    return {
      name: name,
      code: code
    }
  })();

  alert(UserInfo.name)
})()

/**
 * 惰性单体
 */
(function(){

  var UserInfo = (function() {
    var userInfo = "";
    function init() {
      var name = "";
      var code = "";
      // 请求后台数据获取属性值
      ajax
      return {
        name: name,
        code: code
      }
    }

    return {
      getInstance : function() {
        if (userInfo) {
          return userinfo;
        } else {
          userInfo = init();
          return userInfo;
        }
      }
    }
  })();

  alert(UserInfo.getInstance().name);
})()

/**
 * 分支单体
 * 比如:根据浏览器获取不同的XHR,或者在不同的分辨率下初始化界面
 */
(function() {
  // 获取机器的分辨率
  var screenWidth = window.screen.width;
  var screenHeight = window.screen.height;
  var portalInfo = (function() {
    var $1280 = {info: '1,2,3,5'};
    var $1024 = {info: '1,2,3,5'};
    if(screenWidth == 1280) {
      return $1280;
    } else if (screenWidth == 1024) {
      return $1024;
    }
  })();

  alert(portalInfo.info)
})()

猜你喜欢

转载自blog.csdn.net/u013205165/article/details/90723478
今日推荐