1. 程式人生 > >js設計模式--單體模式

js設計模式--單體模式

var 閉包 uniq har 單體模式 目的 全局 火狐 method

單體模式

  -單體模式(singleton)是javaScript中最基本最有用的設計模式之一。

  -這種模式提供了一種將代碼組織為一個邏輯單元的手段,這個邏輯單元中的代碼可以通過單一

的變量進行訪問。通過確保單體對象只存在一份實例,你就可以確信自己的所有代碼使用的都是

同樣的全局資源。

  -簡單單體

  -閉包單體

  -惰性單體

  -分支單體

<script type="text/javascript" charset="utf-8">
            // 單體模式(singleton)
            // 1.簡單單體模式
            var Singleton = {
                
                attr1 : 
true, attr2 : 10, method1 : function() { alert(‘i am method1‘); }, method2 : function() { alert(‘i am method2‘); } }; // alert(Singleton.attr1); //
補充:劃分命名空間 var YF = {}; YF.Singleton = { attr1 : true, attr2 : 10, method1 : function() { alert(‘i am method1‘); }, method2 : function() { alert(‘i am method2‘); } };
// 2.閉包單體模式 // 閉包的主要目的:保護數據 // 命名空間 var YF1 = {}; YF1.Singleton = (function(){ // 把塊級作用域裏的執行結果賦值給單體對象 // 優點,可以添加自己的私有成員,外部無法發文 var a1 = true; var a2 = 10; var f1 = function() { alert(‘f1‘); }; var f2 = function() { alert(‘f2‘); }; return { attr1 : a1, attr2 : a2, method1 : function() { return f1(); }, method2 : function() { return f2(); } }; })(); alert(YF1.Singleton.attr1); </script>
<script type="text/javascript" charset="utf-8">
            // 單體模式(singleton)
            // 1.惰性單體,和閉包單體有一些相似的地方
            // 頂層的命名空間
            var YF = {};
            YF.Base = (function() {
                
                // 私有變量,控制返回的單體對象
                var uniqueInstance;
                // 構造器 初始化單體對象的方法
                function init() {
                    var a1 = true;
                    var a2 = 10;
                    var f1 = function(){
                        alert(‘f1‘);
                    };
                    
                    var f2 = function(){
                        alert(‘f2‘);
                    };
                    
                    return {
                        attr1 : a1,
                        attr2 : a2,
                        method1 : function() {
                            return f1();
                        },
                        method2: function() {
                            return f2();
                        }
                    };
                }
                
                
                
                return {
                    getInstance : function(){
                        if(!uniqueInstance){
                            // 如果不存在,則創建單體實例
                            uniqueInstance = init();
                        }
                        return uniqueInstance;
                    }
                };
            })();
            
            
            
            
            // 分支單體(判斷程序的分支  <瀏覽器的差異檢測>)
            var YF1 = {};
            // 假設true為FireFox, false為IE
            var difference = true;
            YF1.More = (function(){
                // 火狐瀏覽器內部的一些配置
                var objA = {
                    // 屬性1
                    // 屬性2
                    // 方法1
                    // 方法2
                };
                // IE覽器內部的一些配置
                var objB = {
                    // 屬性1
                    // 屬性2
                    // 方法1
                    // 方法2
                };
                
                return (difference) ? objA : objB;
            })();
            
        </script>

js設計模式--單體模式