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

來源:互聯網
上載者:User

標籤: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

 

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.