zoukankan      html  css  js  c++  java
  • 加载、实例化单例/单体模式(Singleton)by小雨

    在改章节中,我们主要介绍加载、实例化-的内容,自我感觉有个不错的建议和大家分享下

        首先,单例式模是象对的创立式模之一,此外还括包厂工式模。单例式模的三个特色:
    1,该类只有一个实例
    2,该类自行创立该实例(在该类部内创立自身的实例象对)
    3,向全部统系公然这个实例接口

    Java中大概是这个子样

        

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class  Singleton {
         
         //私有,静态的类自身实例
         private  static  Singleton instance = new  Singleton();
         
         //私有的造构子(造构器,造构函数,造构法方)
         private  Singleton(){}
         
         //公然,静态的厂工法方
         public  static  Singleton getInstance() {
             return  instance;
         }
    }

        应用时

        

    ?
    1
    Singleton obj = Singleton.getInstance();

        
    这个单例类在自身被加载时instance会被实例化,即便加载器是静态的。因此,对于资源麋集,置配开销大较的单体更理合的做法是将实例化(new)推迟到应用它的时候。即惰性加载(Lazy loading),它常用于那些必须加载大批数据的单体。改修下

        

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    class  LazySingleton {
         //初始为null,暂不实例化
         private  static  LazySingleton instance = null ;
         
         //私有的造构子(造构器,造构函数,造构法方)
         private  LazySingleton(){}
         
         //公然,静态的厂工法方,须要应用时才去创立该单体
         public  static  LazySingleton getInstance() {
             if ( instance == null  ) {
                 instance = new  LazySingleton();
             }
             return  instance;
         }  
    }

        应用式方同上。

    单例式模是Javascript最基本,最用有的式模之一。它供提了一种将码代组织为一个逻辑单元的手腕,这个逻辑单元中的码代通过单一的变量停止问访。
    单体在Javascipt中有多许用途,可以用来分别命名空间,以增加全局变量的泛滥。还可以用在分支术技顶用来处置各浏览器的差异。
    Javascript中单例式模的实现式方有多种,每一种都有自身的点优或缺陷。

        1,象对直接量实现最基本,最单简的单体

        

    ?
    1
    2
    3
    4
    5
    6
    var  Singleton = {
         attr1 : 1,
         attr2 : 'hello' ,
         method1 : function (){alert( this .attr2);},
         method2 : function (arg){}
    }

        种这式方中,象对有所成员都通过Singleton加点号问访。有所成员是公然的,没有私有的。在执行到变量Singleton时,会加载(实例化)自身,即非惰性加载。
    此外method1用this问访单体的其它成员会存在一些险风,因为method1的上下文不是老是指向Singleton象对。
    比如当把method1作为事件监听器时,this可能指向的是dom素元,这时可能会提示undefined。

        2,闭包实现私有成员的单体

        

    ?
    1
    2
    3
    4
    5
    6
    7
    var  Singleton = function (){
         var  attr = 1, fn = function (){};
         return  {
             method : function (){ fn(); },
             getAttr : function (){ return  attr; }       
         }; 
    }();

        种这式方中var定义私有的成员属性attr,法方fn,然后返回一个公然的接口method和getAttr。后今改修实现时,接口法方method和getAttr变不,只要改修私有的attr和fn的体具实现。应用如下

        

    ?
    1
    2
    Singleton.method();
    Singleton.getAttr();

        3,闭包实现私有成员的惰性实例化单体

        

    ?
    var  LazySingleton = function (){
         var  attr = 1, fn = function (){};
         var  obj = {
             method : function (){ fn(); },
             getAttr : function (){ return  attr; }
         };
         function  init(){
             return  obj;
         }
         return  {getInstace: init};
    }();

         

        实用合场下面已提到:对于那些必须加载大批数据的单体直到须要应用它的时候才实例化。应用式方是这样的

        

    ?
    1
    2
    LazySingleton.getInstance().method();
    LazySingleton.getInstance().getAttr();

        4,又现发另一种

        

    ?
    1
    2
    3
    4
    5
    6
    7
    function  singleton() {
         var  obj = new  Object();
         singleton = function () {
             return  obj;
         };
         return  obj;
    }

        仅在第一次时会new,这个Object泛指自定义的有所类。

    文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
    应聘者:JAVA
    面试官:知道什么叫类么
    应聘者:我这人实在,工作努力,不知道什么叫累
    面试官:知道什么是包?
    应聘者:我这人实在 平常不带包 也不用公司准备了
    面试官:知道什么是接口吗?
    应聘者:我这个人工作认真。从来不找借口偷懒
    面试官:知道什么是继承么
    应聘者:我是孤儿没什么可以继承的
    面试官:知道什么叫对象么?
    应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
    面试官:知道多态么?
    应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??

  • 相关阅读:
    解决 搭建Jekins过程中 启动Tomcat的java.net.UnknownHostException异常
    射手和农场主
    java 和 JS(javaScript)中的反斜杠正则转义
    分享修改密码的SharePoint Web part: ITaCS Change Password web part
    分享微软官方Demo用的SharePoint 2010, Exchange 2010, Lync 2010虚拟机
    Office 365 的公共网站的一些限制及解决的办法
    SharePoint 2013 关闭 customErrors
    安装 KB2844286 导致SharePoint 2010 XSLT web part 显示出现错误
    安装Office Web Apps Server 2013 – KB2592525安装失败
    如何将hyper-v虚拟机转换成vmware的虚拟机- 转换SharePoint 2010 Information Worker Demonstration and Evaluation Virtual Machine (SP1)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3026244.html
Copyright © 2011-2022 走看看