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

 更新时间:2022年08月25日 10:46:58   作者:前端修罗场  
这篇文章主要为大家解析了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 揭示模式单例模式的详细内容,更多关于JS 揭示模式单例模式的资料请关注脚本之家其它相关文章!

相关文章

  • Google 地图控件集详解及实例代码

    Google 地图控件集详解及实例代码

    本文主要介绍Google 地图控件集,这里帮大家整理了关于Google地图控件集的基础知识,详细介绍了控件的功能,并附示例代码,有需要的小伙伴可以参考下
    2016-08-08
  • js 实现Material UI点击涟漪效果示例

    js 实现Material UI点击涟漪效果示例

    这篇文章主要为大家介绍了js 实现Material UI点击涟漪效果示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • js实现兔年转圈圈动画示例

    js实现兔年转圈圈动画示例

    这篇文章主要为大家介绍了js实现兔年转圈圈动画示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 微信小程序 Flex布局详解

    微信小程序 Flex布局详解

    这篇文章主要介绍了微信小程序 Flex布局详解的相关资料,需要的朋友可以参考下
    2016-10-10
  • ChatGPT前端编程秀之别拿编程语言不当语言

    ChatGPT前端编程秀之别拿编程语言不当语言

    这篇文章主要为大家介绍了ChatGPT前端编程秀之教你别拿编程语言不当语言,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 微信小程序-getUserInfo回调的实例详解

    微信小程序-getUserInfo回调的实例详解

    这篇文章主要介绍了微信小程序-getUserInfo回调的实例详解的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
    2017-10-10
  • 微信小程序 获取相册照片实例详解

    微信小程序 获取相册照片实例详解

    这篇文章主要介绍了微信小程序 获取相册照片实例详解的相关资料,需要的朋友可以参考下
    2016-11-11
  • JavaScript中七种流行的开源机器学习框架

    JavaScript中七种流行的开源机器学习框架

    今天小编就为大家分享一篇关于JavaScript中五种流行的开源机器学习框架,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • JavaScript ES新特性块级作用域

    JavaScript ES新特性块级作用域

    这篇文章主要介绍了JavaScript ES新特性块级作用域,所谓的块级作用域,就是该变量只能在声明时的代码块或者子代码块中使用,使JavaScript出现了块级作用域,具体详细内容请参考下面文章内容
    2021-12-12
  • 前端必会的package.json创建及常见属性用法示例详解

    前端必会的package.json创建及常见属性用法示例详解

    这篇文章主要为大家介绍了前端必会的package.json创建及常见属性用法示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论