单例模式,相信大家对此都不陌生,我们主要讲下javascript中几个比较常见的设计模式:

(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学习(9)——[设计模式]单例的更多相关文章

  1. Java学习笔记之---单例模型

    Java学习笔记之---单例模型 单例模型分为:饿汉式,懒汉式 (一)要点 1.某个类只能有一个实例 2.必须自行创建实例 3.必须自行向整个系统提供这个实例 (二)实现 1.只提供私有的构造方法 2 ...

  2. Javascript设计模式学习二(单例)

    定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 普通的单例模式: 使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象.比如:使用 ...

  3. Javascript 设计模式 单例

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30490955 一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法. 1.单 ...

  4. Java设计模式—单例设计模式(Singleton Pattern)全然解析

    转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...

  5. 【java】设计模式-单例设计模式

    单例设计模式:解决一个类在内存中是存在一个对象的问题.当需要该事物的对象在内存中唯一时,将以下三步添加即可. 思想:想要保证对象唯一1.为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象2 ...

  6. java设计模式--单例

    GOF23(group of four)---由4个大牛总结的JAVA23种常用的设计模式,归根结底都是为了代码的可扩展性. 设计模式中一种比较重要的思想就是:开闭原则,尽量做到对扩展开放,对修改关闭 ...

  7. java软件设计模式——单例设计模式中的【饿汉式】与 【懒汉式】示例

    以下为单例设计模式中的两种经典模式的代码示意: 单例设计模式(spring框架IOC,默认创建的对象都是单例的): 饿汉式: public class SingleClass { private Si ...

  8. unity3d中设计模式的学习<一>:泛型单例

    单例是游戏开发中比较常见的设计模式,虽然针对的功能不同,但是有一些功能还是共有的,代码也不少,如果能放在一个基类里面是最好不过了,但是单例里需要有个instance功能来返回当前对象,所以这个功能必须 ...

  9. C#设计模式——单例

    单例模式是设计模式中最简单的形式之一.这一模式的目的是使得类的一个对象成为系统中的唯一实例.对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任 ...

随机推荐

  1. PCB板上镀镍厚度

    PCB制造工业由于成本.周期时间和材料兼容性的原因,对减少沉淀在电路板上的镍的数量感兴趣.最小镍的规格应该帮助防止铜对金表面的扩散.保持良好的焊接点强度.和较低的接触电阻.最大镍的规格应该允许板制造的 ...

  2. (Android) Chinese Character

    Convert Chinese strings to English strings Apply pinyin4j.jar public static class ConvertChineseToPi ...

  3. POJ 1037 DP

    题目链接: http://poj.org/problem?id=1037 分析: 很有分量的一道DP题!!! (参考于:http://blog.csdn.net/sj13051180/article/ ...

  4. 注册表:无法打开 XXX 由于某个错误无法打开该密钥。详细信息:拒绝访问

    错误原因:没有注册表用户权限. 正确添加用户权限的步骤如下:(跟着图片步骤) 右击该项,权限: 选中想要添加为当前所有者的用户后,点击应用.如果没用户显示,可以从“其他用户或组”中添加进来. 权限添加 ...

  5. jvm监控命令介绍

    1.jstack介绍 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在 ...

  6. load_library(linker.cpp:759): library "libmaliinstr.so" not found

    1.02-07 15:19:09.277: E/linker(16043): load_library(linker.cpp:759): library "libmaliinstr.so&q ...

  7. app自动化的webView页面测试思路(appium工具)。

    1.获取当前activity多有的handles,然后去遍历它,发现webView后切换到webView对应模式,就可以了.进一步操作webView的话用下面的方法(driver.getPageSou ...

  8. 【转】使用Boost Graph library(二)

    原文转自:http://shanzhizi.blog.51cto.com/5066308/942972 让我们从一个新的图的开始,定义一些属性,然后加入一些带属性的顶点和边.我们将给出所有的代码,这样 ...

  9. 一,PHP 语法

    基本的 PHP 语法 PHP 的脚本块以 <?php 开始,以 ?> 结束.您可以把 PHP 的脚本块放置在文档中的任何位置. 当然,在支持简写的服务器上,您可以使用 <? 和 ?& ...

  10. Sicily-1063

    一.题意 一个员工是另外一个员工的老板必须满足的条件是作为老板的员工的薪水salary必须大于这个员工,而且作为老板的员工的身高height要大于等于这个员工.首先按照薪水的多少从小到大进行排序,然后 ...