单例模式-摘自《漫谈设计模式》

如果要保证系统里一个类最多只能存一个实例时,就需要单例模式
1)最简单的单例



2)延迟创建
   延迟实例化单例对象(static属性在加载类时就会被初始化),即在第一次使用该类的实例时才实例化
   public class UnThreadSafeSingleton{
       private static UnThreadSafeSingleton = null;
       public static UnThreadSaceSingleton getInstance(){
           if(instance==null){
              instance = new UnThreadSafeSingleton();
           }
           return instance;
       }
      
   }
此方法不是线程安全的


为了解决这个问题,在此方法上加synchronized关键字,即
public static synchronized ThreadSafeSingleton getInstance(){....}

上述实现有performance问题,采用下面方法
3)Double-Check Locking





4)Initialization on demand holder
   这个也是线程安全的延迟的单例初始化方式
public class lazyLoadedSingleton{
private LazyLoadedSingleton(){}

private static class LazyHolder{ //holds the singleton class
    private static final LazyLoadedSingleton singletonInstance = new LazyLoadedSIngleton();
}


public static LazyLoadedSingleton getInstance(){
    return LazyHolder.singletonInstance;
}
}



5)Singleton的序列化








猜你喜欢

转载自xuzhike.iteye.com/blog/1055893