首页 > 代码库 > 设计模式之单例模式(01)
设计模式之单例模式(01)
单例模式分:(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 }
(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 }
单例模式,是java中比较常见的设计模式之一,以上有不对之处,望批评指正
设计模式之单例模式(01)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。