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

<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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值