• js21---单体(单例)模式


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
            <script type=text/javascript charset=utf-8>
                /* 单体
                简单单体
                闭包单体
                惰性单体
                分支单体 */
    
                // 1 简单单体模式(单例模式),不能new了,用于全局资源,公共数据。
                var Singleton = {
                    attr1: true , 
                    attr2: 10 ,
                    method1 : function(){
                        alert('我是方法1');
                    },
                    method2 : function(){
                        alert('我是方法2');
                    }
                };
                alert(Singleton.attr1);
                
                
                // 补充 :划分命名空间 (区分代码),大对象.小对象, Ext.Manager.attr1 / method1
                var BHX = {};
                BHX.Singleton = {//json里面不用this和var,
                    attr1: true , 
                    attr2: 10 ,
                    method1 : function(){
                        alert('我是方法1');
                    },
                    method2 : function(){
                        alert('我是方法2');
                    }                
                };
                BHX.Singleton.method1();
                
                // 2 上面Singleton里面的属性还是可以更改。借用闭包保护数据 
                var BHX = {} ;
                BHX.Singleton = (function(){//(function(){})()
                    // 添加自己的私有成员
                    var a1 = true ;
                    var a2 = 10  ;
                    var f1 = function(){
                        alert('f1');
                    }
                    var f2 = function(){
                        alert('f2');
                    }                
                    // 把块级作用域里的执行结果赋值类我的单体对象
                    return {  //返回要执行才return
                            attr1: a1 , 
                            attr2: a2 ,
                            method1 : function(){
                                return f1();
                            },
                            method2 : function(){
                                return f2();
                            }                        
                    } ;
                })();//Singleton = {attr1: a1 ,attr2: a2 ,method1 :method2 :  }
                
                alert(BHX.Singleton.attr1);//改变Singleton不会改变var a1,a2
                BHX.Singleton.method1();
            </script>
        </head>
        <body>
        </body>
    </html>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            <title>Untitled Document</title>
            <script type=text/javascript charset=utf8>
            // 惰性单体(和闭包单体有一些相似的地方) 
            // 命名空间
            var Ext = {} ;
            Ext.Base = (function(){
                // 私用变量 控制返回的单例对象
                var uniqInstance ; // undefined
                // 需要一个构造器 init 初始化单体对象的方法
                function init(){
                        // 私用成员变量 
                        var a1 = 10 ; 
                        var a2 = true ; 
                        var fn1 = function(){alert('fn1')};
                        var fn2 = function(){alert('fn2')};    
                        return {
                            attr1 : a1 , 
                            arrt2 : a2 , 
                            method1 : function(){
                                return fn1();
                            },
                            method2 : function(){
                                return fn2();
                            }
                        };                        
                }
                return {//不像之前的,代码一执行,Base就有了很多属性,这里只有一个方法。
                    getInstance : function(){//只有Base调用了方法才返回很多属性,
                        if(!uniqInstance){ //每次返回同一个对象,不加判断就返回不是同一个对象,
                            uniqInstance = init();
                        }
                        return uniqInstance ;
                    }
                };
            })();
            
            alert(Ext.Base.getInstance().attr1);
            Ext.Base.getInstance().method1();
            
            
            
            
            
            
            // 分支单体 (判断程序的分支 <浏览器差异的检测>)
            var Ext = {} ;
            var def =  false ;
            Ext.More = (function(){
                var objA = {        // 火狐浏览器 内部的一些配置
                        attr1:'FF属性1'
                        // 属性1 
                        // 属性2 
                        // 方法1 
                        // 方法2
                } ;
                var objB = {        // IE浏览器 内部的一些配置
                        attr1:'IE属性1'
                        // 属性1 
                        // 属性2 
                        // 方法1 
                        // 方法2                            
                } ;
                return (def) ?objA:objB;
            })();
            alert(Ext.More.attr1);
            </script>
        </head>
        <body>
        </body>
    </html>
  • 相关阅读:
    FMDB使用的一点心得:数据库创建、制表、查询等以及image转换成二进制nsdata保存到数据库中
    Java基本数据类型
    hashtable C++实现
    Libgdx中TextButton的一些思考
    [伯努利数] poj 1707 Sum of powers
    POJ 3020:Antenna Placement(无向二分图的最小路径覆盖)
    flume 读取kafka 数据
    [R] 之 帮助函数
    [python] 之 类编码细节
    [python] 之 装饰器
  • 原文地址:https://www.cnblogs.com/yaowen/p/6879939.html
Copyright © 2020-2023  润新知