单例几种常见的形式

系统 1732 0

原文地址: http://forestqqqq.iteye.com/blog/1896723

一,饿汉式单例

Java代码     收藏代码
  1. //饿汉式单例1   
  2. public   class  Singleton1 {  
  3.      private   static   final  Singleton1 instance =  new  Singleton1();  
  4.      private  Singleton1(){}  
  5.      public   static  Singleton1 getInstance(){  
  6.          return  instance;  
  7.     }  
  8. }  
  9.   
  10. //饿汉式单例2   
  11. class  Singleton{  
  12.      private   static   class  Single{  
  13.          static   final  Singleton instance =  new  Singleton();  
  14.     }  
  15.      private  Singleton(){}  
  16.      public   static  Singleton getInstance(){  
  17.          return  Single.instance;  
  18.     }  
  19. }  

 

二,懒汉式单例

Java代码     收藏代码
  1. //懒汉式单例   
  2. public   class  Singleton2 {  
  3.      private   static  Singleton2 instance =  null ;  
  4.      private  Singleton2(){}  
  5.      public   static   synchronized  Singleton2 getInstance(){  
  6.          if (instance ==  null ){  
  7.             instance =  new  Singleton2();  
  8.         }  
  9.          return  instance;  
  10.     }  
  11. }  

 

三,DCL双重锁检测式单例

Java代码     收藏代码
  1. //DCL双重锁检测式单例   
  2. public   class  Singleton3 {  
  3.      private   volatile   static  Singleton3 instance =  null ;  
  4.      private  Singleton3(){}  
  5.      public   static  Singleton3 getInstance(){  
  6.          if (instance ==  null ){  
  7.              synchronized (Singleton3. class ){  
  8.                  if (instance ==  null ){  
  9.                     instance =  new  Singleton3();  
  10.                 }  
  11.             }  
  12.         }  
  13.          return  instance;  
  14.     }  
  15. //参考文章:http://www.ibm.com/developerworks/cn/java/j-dcl.html   
  16. }  

 

 

四,登记式单例

Java代码     收藏代码
  1. import  java.lang.reflect.Constructor;  
  2. import  java.util.HashMap;  
  3. import  java.util.Map;  
  4.   
  5. //登记式单例   
  6. public   class  Singleton4 {  
  7.      private    static   final  Map<String,Singleton4> instances =  
  8.              new  HashMap<String,Singleton4>();  
  9.      static {  
  10.         Singleton4 instance =  new  Singleton4();  
  11.         instances.put(instance.getClass().getName(), instance);  
  12.     }  
  13.      protected  Singleton4(){}  
  14.      public   static   synchronized  Singleton4 getInstance(String name){  
  15.          if (name ==  null ){  
  16.             name = Singleton4. class .getName();  
  17.         }  
  18.          if (instances.get(name) ==  null ){  
  19.              try  {  
  20.                 Constructor con = Class.forName(name).getDeclaredConstructor();  
  21.                 con.setAccessible( true );  
  22.                 instances.put(name, (Singleton4)con.newInstance());  
  23.             }  catch  (Exception e) {  
  24.                 e.printStackTrace();  
  25.             }  
  26.         }  
  27.          return  instances.get(name);  
  28.     }  
  29. //参考文章:http://www.cnblogs.com/whgw/archive/2011/10/05/2199535.html   
  30. }  

单例几种常见的形式


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论