黑马程序员技术交流社区

标题: 单例设计模式 [打印本页]

作者: 冯国强    时间: 2013-10-24 17:58
标题: 单例设计模式
延迟加载的单例设计模式?
作者: 李文帅    时间: 2013-10-24 18:45
延迟加载,也叫延迟实例化,延迟初始化等,首要表达的思惟就是,把对象的创建延迟到应用的时候创建,而不是对象实例化的时辰创建。这种体式格式避免了机能的浪费。
延迟加载的单例设计模式,也叫做懒汉式单例设计模式,对象在方法调用时才被初始化
但是懒汉式单例设计模式执行效率不高,建议使用饿汉式单例设计模式
  1. class Single
  2. {
  3.                      private it num;
  4.              private Single(){}
  5.                      private static Single s = null;
  6.                      public static Single getInstance()       当调用该方法时,对象才被实例化
  7.       {
  8.                                   if(s==null)
  9.          {
  10.                                                synchronized(Single.class)//给Single类加锁,当一个方法正在操作该类时,不让其他方法对该类进行操作,这样做是为了保证对象的唯一性
  11.                   {                    
  12.                            if(s==null)        
  13.                             s = new Single();
  14.                                               }
  15.          }
  16.          return s;
  17.     }
  18. }
复制代码

作者: 流行语    时间: 2013-10-24 18:47
上面的代码有点问题。getInstance()方法中if(p!=null)不正确。如果p != null,那就不需要创建新的对象了,可是上面的代码继续创建新的对象,这就不是单例模式了。
作者: HM代景康    时间: 2013-10-24 19:24
延迟加载,也较延迟实例化,延迟初始化等,首要表达的思惟就是,把对象的创建延迟到应用的时辰创建,而不是对象实例化的时辰创建。这种体式格式避免了机能的浪费。
当创建一个对象的子对象开销斗劲大时,并且有可能在法度顶用不到这个子对象,那么久可以推敲用延迟加载的体式格式来创建子对象。别的就是当一个法度启动时,须要创建多个对象,但仅有几个对象须要立即应用,那么可以将一些不须要的初始化工作延迟到应用的时辰。如许可以进步法度的启动速度。
作者: hurryup    时间: 2013-10-24 19:50
是对象为空才锁码?
作者: Cway㊣    时间: 2013-10-25 09:51
xh396660787 发表于 2013-10-24 18:16
延迟的单例就是懒汉式,调用的时候才会创建对象,所以是延迟加载的。但是延迟加载在多线程中有可能出现创建 ...

你的代码有问题,if(s==null)才对。。。。
作者: aion2013tian    时间: 2013-10-25 13:57

package cn.ineeke.util;
/**
* 单利模式——懒汉式
*/
public class DB {
    private static DB db = null;
     
    public static DB getInstance(){
        if(db == null){
            db = new DB();
        }
        return db;
    }
}
package cn.ineeke.util;
/**
* 单利模式——饿汉式  
*/
public class DB {
    private static DB db = new DB();
     
    public static DB getInstance(){
        return db;
    }
}
这种静态初始化的方法是自己被加载时就自己实例化,被形象的称之为饿汉式单例类。而原先的单例模式处理方式要在第一次被引用的时候才会被实例化,就被称为懒汉式单例类。
由于在多线程访问时懒汉式可能会出现创建出多个实例,而若对其使用synchronized的话,则又会降低程序性能。所以推荐使用饿汉式
作者: 枫儿    时间: 2013-10-25 16:02
延时加载,即判断条件通过后才new对象进内存




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2