zoukankan      html  css  js  c++  java
  • 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();

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

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

  • 相关阅读:
    实验吧因缺思汀的绕过注入解析
    python模块中requests参数stream
    土司论坛nc反弹神器使用方法
    msf web脚本反弹shell
    python 多线程
    metasploit后门维持技术
    ew做socks5代理
    双内网渗透代理之reGeorg+Proxifier
    SVN源码泄露漏洞
    Java反射的实例
  • 原文地址:https://www.cnblogs.com/linda586586/p/4219541.html
Copyright © 2011-2022 走看看