javascript设计模式笔记JavaScript

JavaScript进阶:单例模式

2022-01-24  本文已影响0人  听书先生
1、前言

单例模式又称单体模式,只允许实例化一次的对象类,有时可以使用一个对象来规划一个命名空间。

命名空间:即namespace,在定义变量或者方法时,为了避免不同的开发者重复定义,一般需要使用命名空间进行约束每个人定义的变量,如jQuery的animate方法,调用时:jQuery.animate()

单例模式除了定义命名空间外,还可以通过单例模式来管理代码块的各个模块,如:百度的添加设置元素类会放入到dom模块,阻止事件冒泡会放在event模块中去。

2、简单创建一个单例模式

开始创建一个自己的Configure代码库

// 创建自己的Configure代码库
let  Configure = {
    Utils: {
        util_method1: function() {
            console.log('util_method1')
        },
        util_method2: function() {
            console.log('util_method2')
        },
    },
    Interface: {
        interface_method1: function() {
            console.log('interface_method1')
        },
        interface_method2: function() {
            console.log('interface_method2')
        }
    },
    Style: {
        style_method1: function() {
            console.log('style_method1')
        },
        style_method2: function() {
            console.log('style_method2')
        },
    }
}

// 调用Configure库中的Utils模块下的util_method1方法 
Configure.Utils.util_method1();  // util_method1
3、静态变量使用单例模式

静态变量的特性:只能访问不能修改,并且无创建后即能使用的特点。
解决方法:将变量定义在函数内部,但是不提供赋值变量的方法,只提供取值的方法,为了让外部能够进行访问,创建的函数先执行一次,这样我们创建的对象内部保存静态变量通过取值器访问,最后将这个对象作为一个单例放在全局空间作为静态变量提供出去。

const _static = (function(){
    // 私有变量
    let setting = {
        MAX_NUM: 100,
        MIN_NUM: 1,
        COUNT: 30
    }
    return {
        // 返回值
        get: function(name) {
            return setting[name] ? setting[name] : null;
        }
    }
})();

const _data = _static.get('COUNT');

console.log(_data);  // 30
3、惰性单例

有的情况下需要单例对象延迟创建,因此,也存在一种延迟创建的惰性模式。

// 惰性单例
const LazySingle = (function(){
    // 单例实例引用
    let _instance = null;
    // 单例
    function Single() {
        return {
            // 私有方法和属性
            method1: function() {},
            _attrData: 'test-01'
        }
    }
    return function() {
        if(!_instance){
            _instance = Single()
        }
        return _instance;
    }
})()

console.log(LazySingle()._attrData);  //  test-01
上一篇 下一篇

猜你喜欢

热点阅读