解析Javascript设计模式Revealing Module 揭示模式单例模式

2022-10-07,,,

1. revealing module 揭示模式

该模式能够在私有范围内简单定义所有的函数和变量,并返回一个匿名对象, 它拥有指向私有函数的指针,该函数是他希望展示为公有的方法。

示例:

<script>
var myrevealingmodule = function () {
    var privatevar = "ren cherry",
            publicvar = "hey there";
    function privatefunction() {
            console.log("name:"+privatevar);
    }
    function publicsetname(strname) {
            privatename = strname;
    }
    function publicgetname() {
            privatefunction();
    }
    //将暴露的公有指针指向到私有函数和属性上
    return {
            setname: publicsetname,
            greeting: publicvar,
            getname: publicgetname
    };
}();
myrevealingmodule.setname("paul kinlan");
</script>

优点:

  • 该模式很容易之处哪些函数和变量可被公开访问,改善了可读性。
  • 如果一个私有函数引用一个公有函数,在需要打补丁时,公有函数是不能被覆盖的。 因为私有函数将继续引用私有实现,该模式并不适用于公有成员,只使用函数。

2. singleton 单例模式

单例模式,能够限制类的实例化次数只能为一次。单例模式,在该实例不存在的情况下, 可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用;

示例:

<script type="text/javascript">
var mysingleton = (function () {
        //实例保持了singleton 的一个引用
        var instance;
        function init() {
                //singleton
                //私有方法和变量
                function privatemethod() {
                        console.log("i am private");
                }
                var privatevariable = "i am also private";
                var privaterandomnumber = math.random();
                return {
                        //公有方法和变量
                        publicmethod: function () {
                                console.log("the public can see me!");
                        },
                        publicproperty: "i am also public",
                        getrandomnumber: function() {
                                return privaterandomnumber;
                        }
                };
        };
        return {
                //获取singleton 的实例,如果存在就返回,不存在就创建新实例
                getinstance: function() {
                        if(!instance) {
                                instance = init();
                        }
                        return instance;
                }
        };
})();
var singlea = mysingleton.getinstance();
var singleb = mysingleton.getinstance();
console.log(singlea.getrandomnumber()===singleb.getrandomnumber());//true
</script>

在实践中,当在系统中确实需要一个对象来协调其他对象时,>singleton模式很有用。

示例:

<script type="text/javascript">
var singletontester = (function() {
        //options: 包含singleton所需配置信息的对象
        //var options = {name:"test",pointx:5};
        function singleton(options) {
                //如果未提供options,则设置为空对象
                options = options || {};
                //为singleton设置一些属性
                this.name = "singletontester";
                this.pointx = options.pointx || 6;
                this.pointy = options.pointy || 10;
        }
        //实例持有者
        var instance;
        //静态变量和方法的模拟
        var _static = {
                name: "singletontester",
                //获取实例的方法,返回singleton对象的singleton实例
                getinstance: function(options) {
                        if(instance === undefined) {
                                instance = new singleton(options);
                        }
                        return instance;
                };
                return _static;
        }
})();
var singletontest = singletontester.getinstance({
        pointx: 5
});
console.log(singletontest.pointx);//5
</script>

以上就是解析javascript设计模式revealing module 揭示模式单例模式的详细内容,更多关于js 揭示模式单例模式的资料请关注其它相关文章!

《解析Javascript设计模式Revealing Module 揭示模式单例模式.doc》

下载本文的Word格式文档,以方便收藏与打印。