设计模式知识连载(18)---单例模式:

来源:互联网 发布:java创建socket服务端 编辑:程序博客网 时间:2024/06/05 18:11
<body><h3>设计模式知识连载(18)---单例模式:</h3><p>    单例模式:又被称为单体模式,是只允许实例化一次的对象类。    常用一个对象来规划一个命名空间,井井有条的管理对象上的属性和方法</p><script type="text/javascript">    /**    *   案例,方式一:初始    */    // // 滑动特效    // function g(id) {    //  return document.getElementById(id) ;    // } ;    // function css(id, key, value) {    //  g(id).style[key]  = value ;    // } ;    // function attr(id, key, value) {    //  g(id)[key] = value ;    // } ;    // function html(id, value) {    //  g(id).innerHTML = value ;    // } ;    // function on(id, type, fn) {    //  g(id)['on' + type] = fn ;    // } ;    /**    *   案例,方式二:单例模式    */    // 滑动特效    var GP = {        g : function(id) {            return document.getElementById(id) ;        },        css : function(id, key, value) {            // 简单样式的属性设置            // g(id).style[key] = value ;       // 用了单例模式,这样写会报错            // GP.g(id).style[key] = value ;    // 得加上命名空间            this.g(id).style[key] = value ;     // 这里在同一个命名空间里,所以可以用this        },        attr : function(id, key, value) {            this.g(id)[key] = value ;        },        html : function(id, value) {            this.g(id).innerHTML = value ;        },        on : function(id, type, fn) {            this.g(id)['on' + type] = fn ;        }    } ;    /****    *   用单例模式创建一个小型代码库    ****/    var Single = {        // 公用模块        Util : {            util_method1 : function() {},            util_method2 : function() {}            // ...        },        // 工具模块        Tool : {            tool_method1 : function() {},            tool_method2 : function() {}            // ...        },        // ajax模块        Ajax : {            get : function() {},            post : function() {}            // ...        },        // 其他模块        Other : {        }    } ;    // 使用模块    Single.Util.util_method2() ;    Single.Tool.tool_method1() ;    Single.Ajax.get() ;    /****    *   管理静态变量    ****/    var Conf =(function() {        // 私有变量        var conf = {            MIN_NUM : 1,             MAX_NUM :100,            COUNT : 300        } ;        // 返回取值器对象        return {            // 取值器方法            get : function(name) {                return conf[name] ? conf[name] : null ;            }        }    })() ;    // 测试用例:    var count = Conf.get('COUNT') ;    console.log('count:', count) ;  // 300    /****    *   惰性单例(惰性创建)    *   有些时候对于单例对象需要延迟创建    ****/    // 惰性载入单例    var LazySingle = (function() {        // 单例实例引用        var _instance = null ;        // 单例        function Single() {            // 这里定义私有属性和方法            return {                publicProperty : '1.0',                publicMethod : function() {}            }        } ;        // 获取单例对象接口        return function() {            // 如果为创建单例将创建单例            if(!_instance) {                _instance = Single() ;            } ;            // 返回单例            return _instance ;        }    })() ;    // 测试用例:    var publicProperty = LazySingle().publicProperty ;    console.log('publicProperty:', publicProperty) ;</script>   </body>
阅读全文
0 0