javascript学习(9)——[设计模式]单例
单例模式,相信大家对此都不陌生,我们主要讲下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)——[设计模式]单例的更多相关文章
- Java学习笔记之---单例模型
Java学习笔记之---单例模型 单例模型分为:饿汉式,懒汉式 (一)要点 1.某个类只能有一个实例 2.必须自行创建实例 3.必须自行向整个系统提供这个实例 (二)实现 1.只提供私有的构造方法 2 ...
- Javascript设计模式学习二(单例)
定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点 普通的单例模式: 使用一个变量来标记当前是否已经为某个类创建过对象,如果是的话,在下一次获取该类的实例时,直接返回之前创建的对象.比如:使用 ...
- Javascript 设计模式 单例
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/30490955 一直很喜欢Js,,,今天写一个Js的单例模式实现以及用法. 1.单 ...
- Java设计模式—单例设计模式(Singleton Pattern)全然解析
转载请注明出处:http://blog.csdn.net/dmk877/article/details/50311791 相信大家都知道设计模式,听的最多的也应该是单例设计模式,这种模式也是在开发中用 ...
- 【java】设计模式-单例设计模式
单例设计模式:解决一个类在内存中是存在一个对象的问题.当需要该事物的对象在内存中唯一时,将以下三步添加即可. 思想:想要保证对象唯一1.为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象2 ...
- java设计模式--单例
GOF23(group of four)---由4个大牛总结的JAVA23种常用的设计模式,归根结底都是为了代码的可扩展性. 设计模式中一种比较重要的思想就是:开闭原则,尽量做到对扩展开放,对修改关闭 ...
- java软件设计模式——单例设计模式中的【饿汉式】与 【懒汉式】示例
以下为单例设计模式中的两种经典模式的代码示意: 单例设计模式(spring框架IOC,默认创建的对象都是单例的): 饿汉式: public class SingleClass { private Si ...
- unity3d中设计模式的学习<一>:泛型单例
单例是游戏开发中比较常见的设计模式,虽然针对的功能不同,但是有一些功能还是共有的,代码也不少,如果能放在一个基类里面是最好不过了,但是单例里需要有个instance功能来返回当前对象,所以这个功能必须 ...
- C#设计模式——单例
单例模式是设计模式中最简单的形式之一.这一模式的目的是使得类的一个对象成为系统中的唯一实例.对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任 ...
随机推荐
- Windows Phone
错误: DEP6100 : 引导阶段“正在连接到设备”出现以下意外错误: SmartDeviceException - Windows Phone IP over USB Transport (IpO ...
- Linux学习笔记之权限与命令之间的关系(重要)及文件与文件夹知识总结
一.让使用者能进入某文件夹成为可工作文件夹的基本权限为何: 可使用的命令:比如 cd 等变换工作文件夹的命令. 文件夹所需权限:使用者对这个文件夹至少须要具有 x的权限 额外需求:假设使用者想要在这个 ...
- Linux Shell 学习笔记 一 目录结构
以Red Hat Enterprise Linux 各版本为例,RHEL中目录具体作用如下, /bin 存放普通用户使用的命令 /sbin 存放管理员可以执行的命令 /home ...
- JS中的replace方法
JavaScript中replace() 方法如果直接用str.replace("-","!") 只会替换第一个匹配的字符. 而str.replace(/\-/ ...
- [Jobdu] 题目1520:树的子结构
题目描述: 输入两颗二叉树A,B,判断B是不是A的子结构.注:B为空树时不为任何树的子树 typedef struct BTNode{ int key; struct BTNode *rchild; ...
- GBK转utf-8,宽字符转窄字符
//GBK转UTF8 string CAppString::GBKToUTF8(const string & strGBK) { string strOutUTF8 = "" ...
- Android应用开发提高篇(5)-----Camera使用
链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/06/2382679.html 一.概述 Camera是手机的一个很重要的设备,可以说现在的每一部 ...
- BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏( floyd )
直接floyd.. ---------------------------------------------------------------------------- #include<c ...
- java 多个文件打包zip
/** * 多个文件打包成zip */ public class ZipDemo { private static void create() throws Exception{ String pat ...
- asp.net mvc重写RequestValidator
/// <summary> /// <httpRuntime requestValidationType="xxx.CustomRequestValidator" ...