【单例模式】饿汉式&懒汉式

来源:互联网 发布:云平台软件 编辑:程序博客网 时间:2024/04/27 19:14

 之前学习单例模式,现在回忆了一下,记录下关于单例模式的写法:

 

懒汉式:

Java代码  收藏代码
  1. public class Singleton {  
  2.     /* 
  3.      * 单例模式:单个实例服务于整个应用 
  4.      * 懒汉式单例:只有在第一次请求实例的时候创建,并且只在第一次创建后,以后不再创建该类的实例 
  5.      */  
  6.       
  7.     // 1.一个私有的指向自己的静态变量  
  8.     private static Singleton instance;  
  9.       
  10.     // 2.私有的构造方法,保证不能从外部创建对象  
  11.     private Singleton(){}  
  12.       
  13.     // 3.公开的静态工厂方法,返回该类的唯一实例(当发现没有实例没有初始化的时候才初始化)  
  14.     public static Singleton getInstance(){  
  15.         if(instance == null){  
  16.             instance = new Singleton();  
  17.             System.out.println("创建Singleton类的实例");  
  18.         }else {  
  19.             System.out.println("实例已经创建,不能再创建");  
  20.         }  
  21.         return instance;  
  22.     }  
  23.       
  24. }  
  25.   
  26.   
  27.   
  28.   
  29. // 测试类  
  30. class Test{  
  31.     public static void main(String[] args) {  
  32.         Singleton s = Singleton.getInstance();  
  33.         System.out.println(Singleton.getInstance());  
  34.         System.out.println(Singleton.getInstance());  
  35.         System.out.println(Singleton.getInstance());  
  36.     }  
  37. }  

 

饿汉式:

Java代码  收藏代码
  1. public class Singleton2 {  
  2.     /* 
  3.      * 恶汉单例模式:在类加载的时候就创建一个单例模式. 
  4.      */  
  5.       
  6.     // 1.私有的构造函数,确保不能在类的外部访问该类的构造函数  
  7.     private Singleton2(){  
  8.         System.out.println("构造函数执行了");  
  9.     }  
  10.       
  11.     // 2.私有的唯一的静态实例变量,在类加载的时候就创建好单例对象  
  12.     private final static Singleton2 instance = new Singleton2();  
  13.       
  14.     // 3.公开的静态工厂返回此类的唯一实例  
  15.     public static Singleton2 getInstance(){  
  16.         return instance;  
  17.     }  
  18. }  
  19.   
  20. // 测试类  
  21. class Test2{  
  22.     public static void main(String[] args) {  
  23.         Singleton2 s = Singleton2.getInstance();  
  24.         System.out.println(s);  
  25.         Singleton2 s2 = Singleton2.getInstance();  
  26.         System.out.println(s2);  
  27.         System.out.println(Singleton2.getInstance());  
  28.         System.out.println(Singleton2.getInstance());  
  29.     }  
  30. }  

 

原创粉丝点击