设计模式之单例模式(01)

it2022-05-05  176

单例模式分:(1)饿汉式(2)懒汉式 

单例模式要求:(1)私有的构造方法(2)提供获取实例的静态方法

(1)饿汉式

1 public class SingleDemo{ 2   //静态对象,类一旦加载,就实例化; 3   private static SingleDemo singleDemo = new SingleDemo(); 4   //私有化构造方法 5   private SingleDemo(){}; 6   //提供对外访问的方法 7   public static SingleDemo getInstance(){ 8     return singleDemo; 9   } 10 } View Code

(2)懒汉式(注意存在线程安全问题)

1 //方式一:不同步(线程安全问题) 2 public class SingleDemo{ 3   //初始化不创建实例 4   private static SingleDemo singleDemo; 5   //私有化构造方法 6   private SingleDemo(){}; 7   //提供对外访问的方法 8   public static SingleDemo getInstance(){ 9     if(singleDemo==null){ 10        singleDemo = new SingleDemo(); 11     } 12     return singleDemo; 13   } 14 } 15 16 //方式二:同步方法 17 //加同步解决线程安全问题(关键字:synchronized), 18 //这种同步方式,效率欠佳,因为每次获得对象实例,都要先经过synchronized判断锁,之后再判断是否为空 19 20 21 public class SingleDemo{ 22   //初始化不创建实例; 23   private static SingleDemo singleDemo; 24   //私有化构造方法 25   private SingleDemo(){}; 26   //提供对外访问的方法 27   public synchronized static SingleDemo getInstance(){ 28     if(singleDemo == null){ 29        singleDemo = new SingleDemo(); 30     } 31     return singleDemo; 32   } 33 34 } 35 36 //方式三:同步代码块 37 public class SingleDemo{  38 //初始化不创建实例; 39   private static SingleDemo singleDemo; 40   //私有化构造方法 41   private SingleDemo(){}; 42   //提供对外访问的方法 43   public synchronized static SingleDemo getInstance(){ 44     //第一次创建的时候,首先判断是否为空,然后在判断锁,然后在走一次是否为空,最后创建, 45     //但第二次访问的时候,就只判断是否为空了(这时候不为空,所以不判断锁) 46     if(singleDemo==null){ 47       synchronized(SingleDemo.class){ 48         if(singleDemo == null){ 49           singleDemo = new SingleDemo(); 50         } 51       } 52     } 53     return singleDemo; 54   } 55 } View Code

单例模式,是java中比较常见的设计模式之一,以上有不对之处,望批评指正

 

转载于:https://www.cnblogs.com/huaxueyihao/p/6516892.html


最新回复(0)