标签:zhang 简单 四种 style 分支 instance 判断 attr 初始化
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
标签:zhang 简单 四种 style 分支 instance 判断 attr 初始化
原文地址:http://www.cnblogs.com/Lin-Yi/p/7455525.html