关于单例模式

来源:互联网 发布:c语言怎么求素数因子 编辑:程序博客网 时间:2024/04/29 22:17

一、饿汉式

  1. //饿汉式  
  2. public class Singleton {  
  3.       
  4.     //单例变量 ,static的,在类加载时进行初始化一次,保证线程安全   
  5.     private static Singleton instance = new Singleton();      
  6.       
  7.     //私有化的构造方法,保证外部的类不能通过构造器来实例化。       
  8.     private Singleton() {}  
  9.       
  10.     //获取单例对象实例       
  11.     public static Singleton getInstance() {  
  12.         System.out.println("我是饿汉式单例!");  
  13.         return instance;  
  14.     }  

看到上面的代码,瞬间觉得这个世界清静了。不过这种方式采用的是饿汉式的方法,就是预先声明Singleton对象,这样带来的一个缺点就是:如果构造的单例很大,构造完又迟迟不使用,会导致资源浪费。


二、懒汉式

  1. //内部类实现懒汉式  
  2. public class Singleton {  
  3.       
  4.     private static class SingletonHolder{  
  5.         //单例变量    
  6.         private static Singleton instance = new Singleton();  
  7.     }  
  8.       
  9.     //私有化的构造方法,保证外部的类不能通过构造器来实例化。  
  10.     private Singleton() {  
  11.           
  12.     }  
  13.       
  14.     //获取单例对象实例  
  15.     public static Singleton getInstance() {  
  16.         System.out.println("我是内部类单例!");  
  17.         return SingletonHolder.instance;  
  18.     }  
  19. }

懒汉式(避免上面的资源浪费)、线程安全、代码简单。因为java机制规定,内部类SingletonHolder只有在getInstance()方法第一次调用的时候才会被加载(实现了lazy),而且其加载过程是线程安全的(实现线程安全)。内部类加载的时候实例化一次instance。





原创粉丝点击