1 /*
2 1 简单单体
3 */
4 var Singleton = {
5 attr1: 1 ,
6 method1:function(){
7 //do sth
8 }
9 };
10 alert(Singleton.attr1);
11 Singleton.method1();
12
13 //单体模式一般用于划分命名空间 也就是区分是哪位开发人员的代码 例如
14 //张三工程师开发的代码
15 var Zhangsan = { };
16 //把张三的逻辑写在这里面
17 Zhangsan.Singleton = {
18 attr1:1,
19 method1:function(){
20 //do sth
21 }
22 };
23
24
25
26
27 /*
28 2 闭包单体: 闭包主要的目的是保护私有变量数据
29 */
30 // 命名空间
31 var Zhangsan = {};
32 Zhangsan.Singleton = ( function(){
33 //私有变量和方法
34 var a = 1;
35 function f(){
36 //do sth
37 }
38 //返回单体对象
39 return {
40 attr1: a,
41 method1:function(){
42 return f();
43 }
44 };
45 })();
46 alert(Zhangsan.Singleton.attr1);
47 Zhangsan.Singleton.method1();
48
49 /*
50 3 惰性单体:(和闭包单体有相似的地方)
51 */
52
53 var Zhangsan = {};
54 Zhangsan.Singleton = (function(){
55 //私有变量 控制返回的单体对象
56 var uniqInstance;
57 //初始化方法,控制返回的单体中有哪些东西
58 function init(){
59 //私有变量
60 var a = 10;
61 var fn = function(){
62 alert("fn");
63 };
64 return {
65 attr : a,
66 method : fn
67 };
68 }
69
70 return {
71 getInstance:function(){ //如果有单体 则返回 否则创建一个返回
72 if(!uniqInstance){ //如果不存在
73 uniqInstance = init();
74 }
75 return uniqInstance;
76 }
77 };
78 })();
79
80 //调用惰性单体
81 alert(Zhangsan.Singleton.getInstance().attr); //10
82 Zhangsan.Singleton.getInstance().method(); //fn
83
84
85
86 /*
87 4 分支单体:判断程序分支 浏览器的差异检测
88 */
89 var Zhangsan ={};
90 var different = true; //用于标记不同的浏览器
91 Zhangsan.Singleton = (function(){
92 var objA = { //a浏览器的内部配置
93 //属性、方法等
94 attr:"a",
95 method : function(){
96 alert("fn");
97 }
98 };
99 var objB = { //b浏览器的内部配置
100 //属性、方法等
101 };
102 return (different) ? objA:objB; //根据不同的浏览器 返回不同的对象
103 })();
104
105 alert(Zhangsan.Singleton.attr); //a