单例模式,相信大家对此都不陌生,我们主要讲下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. 了解常见的浏览器内核 Trident,Geckos,Presto,Webkit

    了解常见的浏览器内核 Trident,Geckos,Presto,Webkit 内核只是一个通俗的说法,英文名称为"Layout engine",翻译过来就是"排版引擎& ...

  2. CFBundleName系列参数的含义

    顺带讲一下其他这些选项表示什么意思: CFBundleName: CFBundleName指定了该束的简称.简称应该小于16个字符并且适合在菜单和“关于”中显示.通过把它加入到适当的.lproj子文件 ...

  3. ComboBox控件绑定数据源

    最近在研究机房收费系统的组合查询的方法时,看到了ComboBox控件可以进行数据绑定,我觉得这个功能真的很不错,可以给我省去很多的麻烦. 下面是我组合查询窗体界面 一.数据转换方法 现在我们开看一下我 ...

  4. 《Java4Android视频教程》学习笔记(二)

    一:面向对象 1.对象 ①对象的使用方法 对象.变量 对象.方法 ②匿名对象 new A().方法 new A().变量 匿名对象会被分配到对内存中 java内存处理机制会对一定时间内无指针指向的对象 ...

  5. 新浪微博 2.4sdk 一闪而过

    解决方法,保持 ios应用中的 build id和 开放平台中填写的一致

  6. CSS了一个浮动导航条

    绝对浏览器窗口定位positio:FIXED: 下拉后出现返回顶部按钮 图片是我们美工给做的.55*55px,中间缝隙3px. css: html,body { height:100%}html,bo ...

  7. iOS 10 创建iMessage App

    原文作者 澳大利亚19岁少年--Davis Allie ----原文地址 时值中秋佳节, 送给出门在外的程序猿们 ! 骚年们, 自己写个表情包斗图可否 ! 斗-seal.svg.png 第一. 介绍 ...

  8. PHP-购物网站开发设计(一)

    2015-07-6 开始使用PHP完成简单购物网站的设计,首先要选择合适的软件平台,所以今天先记录平台的选择与搭建: 我选择使用Apache24 + PHP 5.6 + MySQL 开发环境完成PHP ...

  9. pure学习笔记

    最近研究Pure,发现这个对于写css来说确实是个好的框架,特此总结了一番,如有错误或不足的地方,欢迎交流指点,轻拍. 此文运用的是优雅的Markdown而书 Pure学习笔记 #写在最前 1# Pu ...

  10. tomcat应用转到weblogic上时的问题

    昨天将一个tomcat环境下调试通过的报表demo应用发布到weblogic上做测试,结果发现好多问题.总结了一下,主要有这么几点: 1.使用log4j的问题. tomcat应用直接发布到weblog ...