<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type=text/javascript charset=utf-8>
/* 单体
简单单体
闭包单体
惰性单体
分支单体 */ // 1 简单单体模式(单例模式),不能new了,用于全局资源,公共数据。
var Singleton = {
attr1: true ,
attr2: 10 ,
method1 : function(){
alert('我是方法1');
},
method2 : function(){
alert('我是方法2');
}
};
alert(Singleton.attr1); // 补充 :划分命名空间 (区分代码),大对象.小对象, Ext.Manager.attr1 / method1
var BHX = {};
BHX.Singleton = {//json里面不用this和var,
attr1: true ,
attr2: 10 ,
method1 : function(){
alert('我是方法1');
},
method2 : function(){
alert('我是方法2');
}
};
BHX.Singleton.method1(); // 2 上面Singleton里面的属性还是可以更改。借用闭包保护数据
var BHX = {} ;
BHX.Singleton = (function(){//(function(){})()
// 添加自己的私有成员
var a1 = true ;
var a2 = 10 ;
var f1 = function(){
alert('f1');
}
var f2 = function(){
alert('f2');
}
// 把块级作用域里的执行结果赋值类我的单体对象
return { //返回要执行才return
attr1: a1 ,
attr2: a2 ,
method1 : function(){
return f1();
},
method2 : function(){
return f2();
}
} ;
})();//Singleton = {attr1: a1 ,attr2: a2 ,method1 :method2 : } alert(BHX.Singleton.attr1);//改变Singleton不会改变var a1,a2
BHX.Singleton.method1();
</script>
</head>
<body>
</body>
</html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type=text/javascript charset=utf8>
// 惰性单体(和闭包单体有一些相似的地方)
// 命名空间
var Ext = {} ;
Ext.Base = (function(){
// 私用变量 控制返回的单例对象
var uniqInstance ; // undefined
// 需要一个构造器 init 初始化单体对象的方法
function init(){
// 私用成员变量
var a1 = 10 ;
var a2 = true ;
var fn1 = function(){alert('fn1')};
var fn2 = function(){alert('fn2')};
return {
attr1 : a1 ,
arrt2 : a2 ,
method1 : function(){
return fn1();
},
method2 : function(){
return fn2();
}
};
}
return {//不像之前的,代码一执行,Base就有了很多属性,这里只有一个方法。
getInstance : function(){//只有Base调用了方法才返回很多属性,
if(!uniqInstance){ //每次返回同一个对象,不加判断就返回不是同一个对象,
uniqInstance = init();
}
return uniqInstance ;
}
};
})(); alert(Ext.Base.getInstance().attr1);
Ext.Base.getInstance().method1(); // 分支单体 (判断程序的分支 <浏览器差异的检测>)
var Ext = {} ;
var def = false ;
Ext.More = (function(){
var objA = { // 火狐浏览器 内部的一些配置
attr1:'FF属性1'
// 属性1
// 属性2
// 方法1
// 方法2
} ;
var objB = { // IE浏览器 内部的一些配置
attr1:'IE属性1'
// 属性1
// 属性2
// 方法1
// 方法2
} ;
return (def) ?objA:objB;
})();
alert(Ext.More.attr1);
</script>
</head>
<body>
</body>
</html>

js21---单体(单例)模式的更多相关文章

  1. Singleton(单例)模式

    Singleton(单例)模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. public class Singleton { private static Singleton ourIns ...

  2. Java设计模式:Singleton(单例)模式

    概念定义 Singleton(单例)模式是指在程序运行期间, 某些类只实例化一次,创建一个全局唯一对象.因此,单例类只能有一个实例,且必须自己创建自己的这个唯一实例,并对外提供访问该实例的方式. 单例 ...

  3. 从别人写的 Object-C 中 Singleton (单例) 模式 中的一些理解--备

    关于 面向对象的设计模式 对于面向对象的设计模式,想必大家并不陌生吧. 纵观23种设计模式中,数单例模式(Singleton)和工厂模式(Factory Method)最为熟悉和基础吧.当然,本文总结 ...

  4. C++ Singleton (单例) 模式最优实现

    参考:http://blog.yangyubo.com/2009/06/04/best-cpp-singleton-pattern/ 索引 静态化并不是单例 (Singleton) 模式 饿汉模式 懒 ...

  5. 设计模式:单例(Sigleton)模式

    题目:设计一个类,我们只能生成该类的一个实例. 只能生成一个实例的类是实现了Singleton(单例)模式的类型. 相关知识: 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象 ...

  6. struts2的action是多例,servlet是单例

    struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的 ...

  7. struts2,servlet和springmvc的单例多例问题

    struts2,servlet和springmvc的单例多例问题 原创 2017年06月12日 09:59:21 标签: struts2 / servlet / springmvc / 单例 / 多例 ...

  8. C# 单例模式和窗体的单例打开方法

    第一种最简单,但没有考虑线程安全,在多线程时可能会出问题,不过俺从没看过出错的现象,表鄙视我…… public class Singleton{    private static Singleton ...

  9. java23种设计模式之二: 单例设计模式(6种写法)

    目的:在某些业务场景中,我们需要某个类的实例对象的只能有一个,因此我们需要创建一些单例对象. 本文共有6种写法,仅供参考 1.饿汉式 优点: 在多线程情况下,该方法创建的单例是线程安全的(立即加载) ...

  10. JavaScript 设计模式之----单体(单例)模式

    设计模式之--单体(单例)模式 1.介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现.OK,正式开始. 在传统开发工 ...

随机推荐

  1. 【Codeforces Round #422 (Div. 2) C】Hacker, pack your bags!(hash写法)

    接上一篇文章; 这里直接把左端点和右端点映射到vector数组上; 映射一个open和close数组; 枚举1..2e5 如果open[i]内有安排; 则用那个安排和dp数组来更新答案; 更新答案完之 ...

  2. hdu 1575 矩阵连乘2

    #include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> ...

  3. 网络载入数据和解析JSON格式数据案例之空气质量监測应用

    一.创建一个新的项目 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res ...

  4. Thinking in UML 学习笔记(三)——UML核心视图之类图

    类图的作用:用于展示系统中的类及其相互之间的关系. UML在解决面向对象的方法中对类理解为三个层次,各自是:概念层.说明层.实现层.在UML中,从開始的需求到终于设计类,类图也是环绕这三个层次的观点进 ...

  5. Kinect for Windows V2 SDK+ VS2012 环境搭建

    眼下使用的SDK版本号是KinectSDK-v2.0-PublicPreview1409-Setup.exe. 下载地址:http://www.microsoft.com/en-us/download ...

  6. UvaLive 6600 Spanning trees in a secure lock pattern 矩阵行列式

    链接:https://icpcarchive.ecs.baylor.edu/index.php? option=com_onlinejudge&Itemid=8&page=show_p ...

  7. iOS Code Sign error: Provisioning profile can&#39;t be found 解决方式

    出现error的过程:在执行另外一个xcode项目重置了code sign.回到原来的项目的时候出现这个error 修复方法: targe-build settings-code signing id ...

  8. 智课雅思短语---一、be no exception

    智课雅思短语---一.be no exception 一.总结 一句话总结:…也不例外? …be no exception 1.经济的快速发展? the rapid development of ec ...

  9. jFinal 关联数据库操作

    1.建数据库(我用的是oracle数据库,其他的相对也差不多) -- Create table create table CLASSES ( classesid NUMBER not null, cl ...

  10. 访问 IIS 元数据库失败 解决办法

    装了VS2005再装IIS,结果出了些小问题访问IIS元数据库失败思考可能是次序出了问题,解决 1.打开CMD,进入 C:\WINDOWS\Microsoft.NET\Framework\v2.0.5 ...