1. 程式人生 > >JavaScript_12設計模式(單體模式【五、六】)惰性單體和分支單體

JavaScript_12設計模式(單體模式【五、六】)惰性單體和分支單體

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>New Web Project</title>
    <script type="text/javascript" charset="UTF-8">
        //惰性單體(和閉包單體有一些相似的地方)
      /*  
        //名稱空間
        var Ext={};
        
        Ext.Base=(function(){
            //私有變數,控制返回單體物件。
            var uniqInstance;//返回undifind
            
            //需要一個構造器,init 初始化單體物件的方法。
            function init(){
                 //私有成員變數
            var a1=10;
            var a2=true;
            var fn1=function(){alert('fn1')};
            var fn2=function(){alert('fn2')};
       
                return{
                    attr1:a1,
                    attr2:a2,
                    method1:function(){
                        return fn1();
                    },
                      method2:function(){
                        return fn2();
                    }
                };
            
            }
            
        
           return{
              getInstance:function(){
                 if(!uniqInstance){//如果不存在,建立單體實列。
                    uniqInstance=init(); 
                 }
                 return uniqInstance;
                 
             } 
               
           };   
                   
        })();
        
        alert(Ext.Base.getInstance().attr1);
        
        Ext.Base.getInstance().method1();
        
        */
        
        //分支單體(判斷程式的分支<瀏覽器差異檢測 >)
            
            var Ext={};
          //  var def=true;  //FE
          var def=false;//IE
          
            Ext.More=(function(){
                var objA={//提供火狐瀏覽器內部的一些配置
                   attr1:"FE屬性1"
                   
                    //屬性1
                    //屬性2
                    //方法1
                    //方法2
                    
                    
                };
                var objB={//提供IE瀏覽器內部的一些配置
                       attr1:"IF屬性2"
                    //屬性1
                    //屬性2
                    //方法1
                    //方法2
                    
                    
                };
                return(def) ?objA:objB;
                
            })();
            
            alert(Ext.More.attr1);
        
    </script>
</head>
<body>
    <h1>New Web Project Page</h1>
</body>