A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© xiaote0225 中级黑马   /  2015-9-28 22:54  /  289 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

.单例模式:饿汉式;懒汉式;区别???

1 个回复

倒序浏览
你提的问题比较好,在求职面试中会有考官问到的。可能机率不会能高。

之前学习单例模式,现在回忆了一下,记录下关于单例模式的写法:
懒汉式:
Java代码:
  • public class Singleton {  
  •     /*
  •      * 单例模式:单个实例服务于整个应用
  •      * 懒汉式单例:只有在第一次请求实例的时候创建,并且只在第一次创建后,以后不再创建该类的实例
  •      */  
  •       
  •     // 1.一个私有的指向自己的静态变量  
  •     private static Singleton instance;  
  •       
  •     // 2.私有的构造方法,保证不能从外部创建对象  
  •     private Singleton(){}  
  •       
  •     // 3.公开的静态工厂方法,返回该类的唯一实例(当发现没有实例没有初始化的时候才初始化)  
  •     public static Singleton getInstance(){  
  •         if(instance == null){  
  •             instance = new Singleton();  
  •             System.out.println("创建Singleton类的实例");  
  •         }else {  
  •             System.out.println("实例已经创建,不能再创建");  
  •         }  
  •         return instance;  
  •     }  
  •       
  • }  
  •   
  •   
  •   
  •   
  • // 测试类  
  • class Test{  
  •     public static void main(String[] args) {  
  •         Singleton s = Singleton.getInstance();  
  •         System.out.println(Singleton.getInstance());  
  •         System.out.println(Singleton.getInstance());  
  •         System.out.println(Singleton.getInstance());  
  •     }  
  • }  






饿汉式:
Java代码  [url=][/url]

  • public class Singleton2 {  
  •     /*
  •      * 恶汉单例模式:在类加载的时候就创建一个单例模式.
  •      */  
  •       
  •     // 1.私有的构造函数,确保不能在类的外部访问该类的构造函数  
  •     private Singleton2(){  
  •         System.out.println("构造函数执行了");  
  •     }  
  •       
  •     // 2.私有的唯一的静态实例变量,在类加载的时候就创建好单例对象  
  •     private final static Singleton2 instance = new Singleton2();  
  •       
  •     // 3.公开的静态工厂返回此类的唯一实例  
  •     public static Singleton2 getInstance(){  
  •         return instance;  
  •     }  
  • }  
  •   
  • // 测试类  
  • class Test2{  
  •     public static void main(String[] args) {  
  •         Singleton2 s = Singleton2.getInstance();  
  •         System.out.println(s);  
  •         Singleton2 s2 = Singleton2.getInstance();  
  •         System.out.println(s2);  
  •         System.out.println(Singleton2.getInstance());  
  •         System.out.println(Singleton2.getInstance());  
  •     }  
  • }  


这两种单例模式在面试中比较容易给问到。而真正能理解这些单例模式的同学又不多,理解了,没过多少天日子就又会忘的了。







回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马