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

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

273次阅读
没有评论

共计 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、短信等云产品特惠热卖中

    星哥玩云

    星哥玩云
    星哥玩云
    分享互联网知识
    用户数
    4
    文章数
    19348
    评论数
    4
    阅读量
    7798726
    文章搜索
    热门文章
    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

    开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

    星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

    云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
    我把用了20年的360安全卫士卸载了

    我把用了20年的360安全卫士卸载了

    我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

    星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
    阿里云CDN
    阿里云CDN-提高用户访问的响应速度和成功率
    随机文章
    星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

    星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

    星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
    Python自学26 – Cookie和Session

    Python自学26 – Cookie和Session

    Python 自学 26 – Cookie 和 Session 在学习 Web 开发时,Cooki...
    星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

    星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

      星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
    优雅、强大、轻量开源的多服务器监控神器

    优雅、强大、轻量开源的多服务器监控神器

    优雅、强大、轻量开源的多服务器监控神器 在多台服务器同时运行的环境中,性能监控、状态告警、资源可视化 是运维人...
    升级自动部署更新SSL证书系统、申请godaddy的APIKEY

    升级自动部署更新SSL证书系统、申请godaddy的APIKEY

    升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...

    免费图片视频管理工具让灵感库告别混乱

    一言一句话
    -「
    手气不错
    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

    恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...
    星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

    星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

    星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...
    你的云服务器到底有多强?宝塔跑分告诉你

    你的云服务器到底有多强?宝塔跑分告诉你

    你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
    星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

    星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

    星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
    三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

    三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

      三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...