• javascript设计模式-单例模式


      在C#中,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,会提供一个静态方法,通过该静态方法可以取得唯一实例。这就确保了一个类只有一个实例对象:

    public class Singleton
    {
        private static Singleton _instance = null;
        private Singleton(){}
        public static Singleton CreateInstance()
        {
            if(_instance == null)
    
            {
                _instance = new Singleton();
            }
            return _instance;
        }
    }

      在js中,单例模式的定义是产生一个类的唯一实例,但js本身是一种“无类”语言。很多讲js设计模式的文章把{}当成一个单例来使用也说得通。因为js生成对象的方式有很多。

      单例模式是Javascript最基本,最有用的模式之一。它提供了一种将代码组织为一个逻辑单元的手段,这个逻辑单元中的代码通过单一的变量进行访问。单例在Javascipt中有许多用处,可以用来划分命名空间,以减少全局变量的泛滥。

      Javascript中单例模式的实现方式有多种,每一种都有自身的优点或缺点。

    1.对象字面量创建单例

    这个也可以归为创建单例的一种方式,在对象字面量中可以添加一些属性和方法:

    var mySingleton = {    
         name: "Rose",    
         age: 20,    
         method1: function () {       
    //your method
    } };

    如果要扩展,可以添加属性和方法。利用对象字面量,可以进行命名空间的划分。

    2.在函数内部声明私有成员和方法,通过闭包在其内部封装这些变量和函数。只暴露需要暴露的公有成员和方法:

    var mySingleton = function () {       
        var privateVariable = 'private var';    
        function showPrivate() {        
            console.log(privateVariable);    
        }    
        return {       
           publicMethod: function () {            
                    showPrivate();        
            },        
           publicVar: 'public var'    
        };
    };
    
    var single = mySingleton();
    single.publicMethod();  // output'private var'
    console.log(single.publicVar); // output 'public var'

    3.使用立即执行函数进行构造

    使用立即执行函数进行构造的一个好处就是节约资源:

    var Singleton = (function () {    
        var instantiated;    
        function init() {        
            return {            
             publicMethod: function () {                
                 console.log('hello world');            
             },            
             publicProperty: 'test'        
           };    
        }    
        return {        
            getInstance: function () {            
                if (!instantiated) {                
                    instantiated = init();            
                }            
                return instantiated;        
            }    
        };
    })();
    Singleton.getInstance().publicMethod();

    这样就做到了只有在使用时才初始化。

     单例模式要点:某个“类”只有一个模式,必须自己创建这个实例,且向系统提供这个实例。

  • 相关阅读:
    js字符串转数组,转对象方法
    react执行yarn eject后配置antd的按需加载
    DOM对象与jquery对象区别
    vscode使用git管理代码
    使用vscode编辑器编辑CPU100%使用率问题
    Java 多态
    1,随机生成一个500m的txt,填充内容为小写的26个字母。生成后,查找abc字符,打印出其数量和位置(越快越好)
    bat 文件
    word2Html
    生成压缩文件
  • 原文地址:https://www.cnblogs.com/linda586586/p/4219541.html
Copyright © 2020-2023  润新知