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>
时间: 2024-10-07 20:23:04

JavaScript设计模式-7.单例模式的相关文章

[JavaScript设计模式]惰性单例模式

惰性单例模式 之前介绍了JS中类的单例模式,这次我们讨论下单例模式的应用.在众多网站中,登录框的实现方式就是一个单例,点击一次就展示一次,所以我们可以在页面加载好的时候就创建一个登录框,点击页面上的登录按钮时,用于控制它的显示和隐藏. 代码实现: 登录 ``` --> 这样的问题就是,如果用户进来后所有的操作根本没有用到登录,那创建登录框这个操作就是无用的,所以改进为当用户点击登录按钮时才开始创建登录框,如下: 登录 ``` --> 现在达到了惰性的目的,但失去了单例的效果.每次点击登录都会创

「设计模式」JavaScript - 设计模式之单例模式与场景实践

单例介绍 上次总结了设计模式中的module模式,可能没有真真正正的使用在场景中,发现效果并不好,想要使用起来却不那么得心应手, 所以这次我打算换一种方式~~从简单的场景中来看单例模式, 因为JavaScript非常灵活,所以在使用设计模式的时候也带来了很强的灵活性,实现单例的方法也有很多,那就需要我们把握住单例模式的核心. 单例模式介绍: 单例模式是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象. 在Ja

javascript设计模式之单例模式

参考资源:深入理解javascript系列 by Uncle Tom 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象. 对象字面量是最简单的单例模式: var mySingleton = { property: "a property", method: function () { console.log("this is a method"); } }; 一个简单的单

JavaScript 设计模式之单例模式

一.单例模式概念解读 1.单例模式概念文字解读 单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象. 2.单利模式概念拟物化解读 买房子要先确认是否有门,没有要联系开发商创建.其次,每一个门都有自己的归属,301归属小王,302归属小李,小王小李属于命名空间,但是一栋楼里有多个小王小李,这些全局命名空

JavaScript设计模式(单例模式)

单例模式是一种简单但非常实用的模式,特别是惰性单例技术,在合适的时候才创建对象,并且只创建唯一的一个.下面我们来逐步了解单例模式的用法. 一.简版单例模式: var Singleton = function(name){ this.name = name; this.instance = null; }; Singleton.prototype.getName = function(){ alert (this.name); }; Singleton.getInstance = function

javaScript设计模式---(单例模式学习)

单例模式 一个类只能有一个实例化对象.如页面中的弹出框蒙层,一个页面只需要一个. 实现方式:创建一个类,这个类包含一个方法,这个方法在没有对象存在的情况下,将会创建一个新的实例对象.如果对象存在,这个对象只是返回这个对象的引用. var singleton = (function singleton () { var instance = null; // 存储单例实例的引用 // 创建单例 function init () { // 私有方法和属性 function privateMethod

学习javascript设计模式之单例模式

1.单例模式的核心是确保只有一个实例,并提供全局访问. 2.惰性单例 指的是在需要的时候才创建对象实例. 如在页面中创建唯一div 普通做法 var createDiv = (function(){    var div;    return function(){        if(!div){            div = document.createElement("div");            div.style.width="100px"; 

【javascript】javascript设计模式之单例模式

单例模式: 定义:单例模式之所以这么叫,是因为它限制一个类只能有一个实例化对象. 实现方法:判断实例是否存在,如果存在则直接返回,如果不存在就创建了再返回.(确保一个类只有一个实例对象) 特点: 命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象 实现单例的方式 一丶对象字面量 var hero = { name : "timo" sex : "male" method: function(){ console.log("提莫队长正在送命&q

javascript设计模式学习——单例模式

单例模式:又被称为单体模式,是只允许实例化一次的对象类. 运用: 1.用一个对象来规划一个命名空间(如:JQuery库,单例模式就为它提供了一个命名空间),井井有条地管理对象上的属性与方法. 2.通过单例模式来管理代码库的各个模块 模块化的概念由来已久,并且在JS中也有很长久的使用历史.通常我们在编写代码时,会将复杂的问题根据实际情况进行合理的拆分,让代码更具备可读性与可维护性.因此一个模块可以理解为整体的一部分.而且随着JS应用复杂度的提高,模块化的应用也变成了必须. 在之前的JS中,没有专门