首页 > 代码库 > JavaScript设计模式-7.单例模式

JavaScript设计模式-7.单例模式

  1 <!DOCTYPE html>
  2 <html>
  3     <head>
  4         <meta charset="UTF-8">
  5         <title>javascript高级语法7-单例模式</title>
  6     </head>
  7     <body>
  8         <script>
  9             /*单例模式在js中使用非常频繁:
 10              * 1.普通单体
 11              * 2.具有局部变量的强大单体
 12              * 3.惰性单体
 13              * 4.分支单体
 14              */
 15             function demo1(){
 16                 //1.普通单体
 17             (function(){
 18                 //通过确保单例对象只存在一个实例,就可以确信自己在所有的代码中使用的是全局资源
 19                 //例如用户登录后的信息可以用一个单体存储
 20                 var UserInfo = {
 21                     name:"zhangdan",
 22                     code:"0202022",
 23                     deptName:"PD",
 24                     deptCode:"PD001",
 25                     getName:function(){
 26                         return "十里河"
 27                     }
 28                 }
 29                 alert(UserInfo.getName());
 30                 //这就是一个最简单的单体,他用来划分命名空间,并且将一群相关的属性方法组织到一起。 可以用.来访问。
 31                 var comm = {};  //把两个单体组织到comm的命名空间下。
 32                 comm.UserInfo = {
 33                     name:"zhangdan",
 34                     code:"0202022",
 35                 }
 36                 comm.funcInfo = {
 37                     funcName:"",
 38                     funcCode:"",
 39                 }
 40                 //在大型项目下,存在着你写的代码还有你引用的外界的JS类库,还有其他同事写的代码和类库。
 41                 //我们通过单体模式就可以很好的区分,这点只能慢慢体会了。
 42             })()
 43             }
 44             
 45             function demo2(){
 46             //2.具有局部变量的强大单体
 47             (function(){
 48                 //模拟一个ajax操作
 49                 function Ajax(){}
 50                 Ajax.request = function(url,fn){
 51                     if(true){
 52                         fn("javascript","extjs");
 53                     }
 54                 }
 55                 //通过闭包的原理解决在上例中的问题
 56                 
 57                 var UserInfo = (function(){
 58                     //利用闭包使单体拥有自己的私有局部变量
 59                     var name = ‘‘;
 60                     var code = ‘‘;
 61                     //利用ajax访问数据库来取得数据
 62                     Ajax.request("www.baidu.com",function(n,c){
 63                         name = n;
 64                         code = c;
 65                     })
 66                     return {
 67                         name:name,
 68                         code:code,
 69                     }
 70                 })();                
 71                 alert(UserInfo.name+"  "+UserInfo.code);
 72             })()
 73             }
 74             
 75             function demo3(){
 76             //3.惰性单体
 77             (function(){
 78                 //模拟一个ajax操作
 79                 function Ajax(){}
 80                 Ajax.request = function(url,fn){
 81                     if(true){
 82                         fn("demo3","extjs");
 83                     }
 84                 }
 85                 //通过闭包的原理解决在上例中的问题
 86                 
 87                 var UserInfo = (function(){
 88                     var userInfo = ""  //私有变量
 89                     
 90                     function init(){
 91                         var name = ‘‘;
 92                         var code = ‘‘;
 93                         //利用ajax访问数据库来取得数据
 94                         Ajax.request("www.baidu.com",function(n,c){
 95                             name = n;
 96                             code = c;
 97                         })
 98                         return {
 99                             name:name,
100                             code:code,
101                         }
102                     }
103                     return {
104                         getInstance:function(){
105                             if(userInfo){
106                                 return userInfo;
107                             }else{
108                                 userInfo = init();
109                                 return userInfo;
110                             }
111                         }
112                     }
113                 })();                
114                 alert(UserInfo.getInstance().name+"  "+UserInfo.getInstance().code);
115             })()
116             }
117             
118             function demo4(){
119                 //4.分支单体
120                 /*
121                  * 用处:在做ajax的时候根据不同的浏览器获得不同的xhr(XMLHttpRequest)
122                  *     在不同分辨率的情况下初始化不一样的界面
123                  */
124                 (function(){
125                     //得到机器分辨率
126                     var screenWidth = window.screen.width;
127                     var screenHeight = window.screen.height;
128                     
129                     var portalInfo = (function(){
130                         var $12801024 = {info:"1,2,3,5"}
131                         var $1024768 = {info:"4,2,1,2"}
132                         if(screenWidth ==1920){
133                             return $12801024;
134                         }else if(screenWidth ==1024){
135                             return $1024768
136                         }
137                     })();
138                     alert(portalInfo.info);
139                 })()
140             /*
141              * 这些并非js的高深技术,是它的使用技巧。
142              */
143             }
144         </script>
145     </body>
146 </html>

 

JavaScript设计模式-7.单例模式