单例模式,相信大家对此都不陌生,我们主要讲下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. one Infos

    Backend Server is still running (PID:). Please try 'euc-server stop' first. (原因很简单,进程控制脚本无restart函数功 ...

  2. ostringstream的使用方法

    ostringstream的使用方法 [本文来自]http://www.builder.com.cn/2003/0304/83250.shtml http://www.cppblog.com/alan ...

  3. POJ1363:Rails

    Description There is a famous railway station in PopPush City. Country there is incredibly hilly. Th ...

  4. SQL Server 链接数据库 error:40

    链接到远程服务器的话,经常犯这个错误,所以做个笔记,省的每次去百度. 1.如果使用的是 local 链接,只需要启动服务就可以了(如下图) 2.如果是远程链接的话,那么是需要启动TCP协议的,步骤如下

  5. HTML5API___manifest

    离线缓存 manifest 在html标签里面增加个属性 mainfest 就可以告诉浏览器缓存文件在哪里. <html manifest='show.manifest' xmlns=" ...

  6. ajax_异步交互-get/post方式

    Ajax的异步交互: 客户端向服务器端发送请求,直到服务器端进行响应,这个过程中,用户可以做任何其他事情(不等). 实现Ajax的异步交互步骤(举例说明): get方式: 1.创建XMLHttpReq ...

  7. [MSSQL]从SQL语句的角度 提高数据库的访问性能

    1.什么是执行计划?执行计划是依赖于什么信息. 2. 统一SQL语句的写法减少解析开销 3. 减少SQL语句的嵌套 4. 使用“临时表”暂存中间结果 5. OLTP系统SQL语句必须采用绑定变量 6. ...

  8. BZOJ 1625: [Usaco2007 Dec]宝石手镯( dp )

    最裸的01背包.... --------------------------------------------------------------------- #include<cstdio ...

  9. gridview回顾

    第一看asp.net是在做项目之前,感觉收获也很大,第二次看gridview是在做完项目之后对GridView的回顾,这次的感觉是:我需要多想点,知识直到用时方觉少.直入正题吧,看gridview. ...

  10. BootStrap学习2 typeahead

    首先看看这些 http://www.wrapcode.com/bootstrap/typeahead-json-objects/ http://stackoverflow.com/questions/ ...