1. 程式人生 > >JavaScript中的單體模式四種實現方式

JavaScript中的單體模式四種實現方式

ret div 劃分 scrip diff different 不同的 如果 get

  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

JavaScript中的單體模式四種實現方式