码迷,mamicode.com
首页 > Web开发 > 详细

js设计模式-单例模式

时间:2016-03-10 14:32:31      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

 

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

1、最常见的单例模式:

 

[javascript] view plain copy
 
  1. //一般用function定义的类,我才会采用首字母大写的方法来约定这个变量为类  
  2. //而对于这种伪类,我通常习惯于使用驼峰式命名法  
  3. var singleton = {  
  4.       attr1: ‘‘,  
  5.       attr2: ‘‘,  
  6.       method1: function() {},  
  7.      method2:  function() {}  
  8. };  



 

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

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

 

[javascript] view plain copy
 
  1. var singleton = (function() {  
  2.       var _a, _b;    //私有变量  
  3.    
  4.      var that = {}; //new某个类  
  5.    
  6.      //公开接口  
  7.      that.getA = function() {  
  8.           return _a;  
  9.     };  
  10.     that.setA = function(a) {  
  11.          _a = a;  
  12.     };  
  13.    
  14.     that.getB = function() {  
  15.          return _b;  
  16.     };  
  17.     that.setB = function(b) {  
  18.          _b = b;  
  19.    
  20.     };  
  21.    
  22.     return that;   //返回单例  
  23. })();  



 

 

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

3、lazy方式的单例模式:

 

[javascript] view plain copy
 
  1. var singleton = (function() {  
  2.       var _a, _b; //私有变量      
  3.       var Class = function() {  
  4.            //code  
  5.       };  
  6.      var that = {};  
  7.     //公开接口  
  8.      that.getA = function() {  
  9.          return _a;  
  10.     };  
  11.     that.setA = function(a) {  
  12.         _a = a;  
  13.     };  
  14.     that.getB = function() {  
  15.         return _b;  
  16.     };  
  17.     that.setB = function(b) {  
  18.        _b = b;  
  19.     };   
  20.     var _instance = null;  
  21.     var getInstance = function() {  
  22.           if(!_instance) {  
  23.                  _instance = new Class();  
  24.            }     
  25.            return _instance;  
  26.     };  
  27.      Class.prototype = that;  
  28.     return {  
  29.           getInstance: getInstance  
  30.    };  
  31. })();  



 

 

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

js设计模式-单例模式

标签:

原文地址:http://www.cnblogs.com/wujindong/p/5261560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!