javascript学习(9)——[设计模式]单例
2013-11-18 13:29
246 查看
单例模式,相信大家对此都不陌生,我们主要讲下javascript中几个比较常见的设计模式:
(1).普通的单体
(2).具有局部变量的强大单体
(3).惰性单体
(4).分支单体
下面我们就一一进行介绍:
(1)普通的单体
(2)具有局部变量的强大单体
return的时候就是直接给你返回一个单例
(3)惰性单体
相对来说,到第三种方法,我们在上边看到我们java中编写单例的影子了
(4)分支单体
其中第四种方法,也在实际项目中也比较常用
(1).普通的单体
(2).具有局部变量的强大单体
(3).惰性单体
(4).分支单体
下面我们就一一进行介绍:
(1)普通的单体
/** * 单例模式在JS中使用非常的频繁 * 通过确保单例对象只存在一个实例, * 你就可以确信自己在所有的代码中使用的是全局资源 */ (function(){ //先看来一个最简单的单体 //例如用户登录后的信息可以用一个单体存储 var UserInfo = { name:"hello", code:"00101", deptName:'PD', deptCode:'PD001', getName : function(){ return "hello"; } } alert(UserInfo.getName()); //这就是一个最简单的单体 //他用来换分命名空间,并且将一群相关的属性和方法组织到一起 //我们可以用.来访问他 var comm = {}; comm.UserInfo = { name:"hello", code:"00101" } comm.funcInfo ={ funcName:'', funcCode:"" } //在大型的项目下,存在这你写的代码,还有你引用外界JS类库 //还有其他同事写的代码和类库 //我们通过单体模式就可以很好的区分他 //这点你只能慢慢的体会了......... })()
(2)具有局部变量的强大单体
/** * 单例模式在JS中使用非常的频繁 * 通过确保单例对象只存在一个实例, * 你就可以确信自己在所有的代码中使用的是全局资源 */ (function(){ //模拟一个Ajax操作 function Ajax(){} Ajax.request = function(url,fn){ if(true){ fn("abc","EXTJS4"); } } //我们通过闭包的原理解决在01例子中出现的问题 var UserInfo = (function(){ //利用闭包是单体有自己的私有局部变量 var name = ""; var code = ""; //利用Ajax访问数据库来取得数据 Ajax.request("abc,function(n,c){ name = n; code = c; }) return { name:name, code:code } })() //实验 alert(UserInfo.name) })()
return的时候就是直接给你返回一个单例
(3)惰性单体
/** * 单例模式在JS中使用非常的频繁 * 通过确保单例对象只存在一个实例, * 你就可以确信自己在所有的代码中使用的是全局资源 */ (function(){ //模拟一个Ajax操作 function Ajax(){} Ajax.request = function(url,fn){ if(true){ fn("abc","EXTJS4"); } } //我们同闭包的原理解决在01例子中出现的问题 var UserInfo = (function(){ var userInfo = "";//私有变量 function init(){ //利用闭包是单体有自己的私有局部变量 var name = ""; var code = ""; //利用Ajax访问数据库来取得数据 Ajax.request("abc",function(n,c){ name = n; code = c; }) return { name:name, code:code } } return { getInstance : function(){ if(userInfo){ return userInfo; }else{ userInfo = init(); return userInfo; } } } })() alert(UserInfo.getInstance().name) })()
相对来说,到第三种方法,我们在上边看到我们java中编写单例的影子了
(4)分支单体
/** * 分支单体 * 用处: * 在做Ajax的时候根据不同的浏览器获得不同的XHR(XMLHttpRequest) * 在不同分辨率的情况下初始化不一样的界面(PCAT2) */ (function(){ //得到机器的分辨率 var screenWidth = window.screen.width; var screenheigth = window.screen.heigth; var portalInfo = (function(){ var $12801024 = {info:'1,2,3,5'} var $1024768 = {info:'4,2,1,2'} if(screenWidth == 1280){ return $12801024; }else if(screenWidth == 1024){ return $1024768; } })(); alert(portalInfo.info); })() //这些并非 javascript的高深技术,是他的使用技巧
其中第四种方法,也在实际项目中也比较常用
相关文章推荐
- javascript学习(11)——[设计模式]工厂模式
- javascript学习(11)——[设计模式]工厂模式
- 设计模式之观察者模式
- 设计模式--观察者模式(Observer)
- 05.基本数据类型的自动拆装箱及享元设计模式
- GoF设计模式的分类极其目的
- 设计模式笔记(8 CHAIN OF RESPONSIBILITY & COMMAND)
- 设计模式之中介者备忘录原型访问者
- GoF23种设计模式之创建型模式之抽象工厂模式
- [置顶] 设计模式之工厂方法模式
- 从“假如有以下几种价格10,20,50,请你代码实现将他们排序输出”看设计模式中的策略模式
- 设计模式之原型模式
- 设计模式之创建型模式―― 1.4 单例模式
- 设计模式学习--原型模式
- (2.2.2.1)设计模式--单例模式(一)懒汉式和饿汉式
- android UI设计MVVM设计模式
- 【js设计模式笔记---工厂模式】
- 设计模式 原型模式(浅拷贝)
- 设计模式四