阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

33次阅读
没有评论

共计 2159 个字符,预计需要花费 6 分钟才能阅读完成。

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

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

示例:

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");

优点:

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

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

    示例:

    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

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

    示例:

    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

    以上就是解析 Javascript 设计模式 Revealing Module 揭示模式单例模式的详细内容

    阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

    腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

    代金券:在阿里云专用满减优惠券

    正文完
    星哥说事-微信公众号
    post-qrcode
     0
    星锅
    版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2159字。
    转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
    【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
    阿里云-最新活动爆款每日限量供应
    评论(没有评论)
    验证码
    【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中