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

导读 这篇文章主要为大家解析了Javascript设计模式Revealing Module 揭示模式及Singleton单例模式示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
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 揭示模式单例模式的详细内容

    原文来自:https://www.jb51.net/article/260615.htm

    本文地址:https://www.linuxprobe.com/javascript-revealing-module.html编辑:向云艳,审核员:逄增宝

    Linux命令大全:https://www.linuxcool.com/

    Linux系统大全:https://www.linuxdown.com/

    红帽认证RHCE考试心得:https://www.rhce.net/

    © 版权声明
    THE END
    喜欢就支持一下吧