美文网首页我爱编程
js设计模式(创建型设计模式)-单例模式

js设计模式(创建型设计模式)-单例模式

作者: 烛林小煜 | 来源:发表于2018-03-29 10:36 被阅读25次

    工作中其实我们经常用到,只不过一直不知道他怎么称呼。如今重新认识一下,单例模式又称单体模式,是只允许实例化一次的对象。


    1.非单例模式

      通常,我们在写页面,比如活动页面,比如操作dom的时候会写一些公共的方法来方便我们自己使用,比如:

    function addCss() {

            var addStyle = "@-webkit-keyframes fall{from{-webkit-transform:translateY(0)}to{-webkit-transform:translateY(" + (mH - 100) + "px)}}\

            @keyframes fall {from{transform:translateY(0)}to{transform:translateY(" + (mH - 100) + "px)}}";

            document.getElementsByTagName('style')[0].insertAdjacentHTML('beforeEnd', addStyle);

        }

        function r(min, max) {

            return ~~(Math.random() * (max - min) + min);

        }

        function $(id) {

            //缓存

            if (!window['_BC_' + id]) {

                window['_BC_' + id] = document.getElementById(id);

            }

            return window['_BC_' + id];

        }

    2.单例模式

    2.1 命名空间管理员

      其实单例模式我们也经常用到,比如你最熟悉的jquery,他就为我们提供了一个命名空间jquery。

      那么命名空间又是什么鬼?他就像人一样,每个人都有自己的空间,张三的空间就叫张三,李四的空间就叫李四,用名字来区别彼此。好比我们用jquery.animate()一样,是一个道理。这样我们就可以防止对象的重写,代码如下

    var redpack = {

    addClass:function(){},

    $:function(){},

    r:function(){}

    }

    2.2 模块分明

      单例模式中,我们可以更清晰的定义模块,方便代码的维护和扩展。好比tangram中的代码

    baidu.dom.addClass  //添加元素类

    baidu.dom.append

    baidu.event.stopPropagation

    2.3 创建小型代码库

    2.4 无法修改的静态变量static

    首先,js是不存在static的,但我们可以通过灵活的方式创建。我们只需要将变量定义在方法中,而不提供修改它的方法就可以了

    var dl = (function() {

            var cfg = {

                    a: 1,

                    b: 2

                },

                return {

                    get: function(param) {

                        return cfg[param] ? cfg[param] : '不存在';

                    }

                }

        })()

    2.5 惰性单例

    单例模式还有一种延迟创建方式,称为惰性创建。代码如下

    var dl = (function() {

            var instance = null;

            function contain() {

                return {

                    a: 1,

                    b: 2

                }

            };

            return {

                get: function() {

                    if (!instance) {

                        var test = contain();

                    }

                    return test

                }

            }

        })()

    惰性单例模式,可以节省初始加载时的开销,在需要的时候调用。

    相关文章

      网友评论

        本文标题:js设计模式(创建型设计模式)-单例模式

        本文链接:https://www.haomeiwen.com/subject/cwspcftx.html