`
c_fanatic
  • 浏览: 67035 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多
如果要保证系统里一个类最多只能存一个实例时,就需要单例模式
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的序列化








  • 大小: 30.8 KB
  • 大小: 41.8 KB
  • 大小: 50.2 KB
  • 大小: 51.7 KB
  • 大小: 72.4 KB
  • 大小: 34.6 KB
  • 大小: 42.4 KB
  • 大小: 21.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics