js设计模式——单例/单体模式

JavaScript中的单例模式是最常用的、最基本的设计模式,它提供了一种命名空间,减少全局变量泛滥的代码管理机制;

1、最常见的单例模式:

//一般用function定义的类,我才会采用首字母大写的方法来约定这个变量为类
//而对于这种伪类,我通常习惯于使用驼峰式命名法
var singleton = {
      attr1: '',
      attr2: '',
      method1: function() {},
     method2:  function() {}
};


这是JavaScript开发中最常用的代码组织方式,这种方式在JavaScript执行的时候,就已经创建了实例对象。这样创建的实例对象,所有的属性、方法都是公开的,有一定的风险;一般使用这样的单例模式,我们可以采用下划线_来命名私有变量,来约定为私有变量。但是很不靠谱!

2、闭包方法的单例模式:

var singleton = (function() {
      var _a, _b;    //私有变量
 
     var that = {}; //new某个类
 
     //公开接口
     that.getA = function() {
          return _a;
    };
    that.setA = function(a) {
         _a = a;
    };
 
    that.getB = function() {
         return _b;
    };
    that.setB = function(b) {
         _b = b;
 
    };
 
    return that;   //返回单例
})();


 

以上这种方法,实现了单例的私有变量对用户透明,用户所能知道的只有公开的接口,不能随意改变私有变量,但是这种方法还是在执行脚步的时候就产生了一个单例,用户有可能根本就不使用这段代码,这样就会造成内存浪费,更好的做法是将类的实例化推迟到需要的时候再实例化;

3、lazy方式的单例模式:

var singleton = (function() {
      var _a, _b; //私有变量    
      var Class = function() {
           //code
      };
     var that = {};
    //公开接口
     that.getA = function() {
         return _a;
    };
    that.setA = function(a) {
        _a = a;
    };
    that.getB = function() {
        return _b;
    };
    that.setB = function(b) {
       _b = b;
    }; 
    var _instance = null;
    var getInstance = function() {
          if(!_instance) {
                 _instance = new Class();
           }   
           return _instance;
    };
     Class.prototype = that;
    return {
          getInstance: getInstance
   };
})();


 

那么这种方法就可以在确实需要这段代码的时候,才实例化,实现懒惰性的单例模式!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值