一些人总结出来的用于解决特定问题的固定的解决方案。
解决一个类在内存中只存在一个对象的目的,保证对象的唯一性
1、为了避免其他程序建立过多的该类对象,禁止其他程序建立该类对象
2.为了其他方便其他程序的访问,在本类中自定义一个对象
3.为方便其他程序对自定义类对象的访问,对外提供一些访问方式.
创建方法:
1.将构造函数私有化。这样别人就不能创建该类的对象。
2.在类中创建一个私有的本类对象。
3、提供一个用类名调用的共有的方法来获取唯一的私有对象。
1 class Single 2 { 3 private static Single s = new Single();//恶汉式 4 private Single() 5 { 6 } 7 public static Single getSingle() 8 { 9 return s; 10 } 11 12 } 13 class Single 14 { 15 private static Single s = null;//懒汉式 16 private Single() 17 { 18 } 19 public static Single getSingle() 20 { 21 if(s == null) 22 s = new SIngle(); 23 return s 24 } 25 26 }
懒汉模式public static Single s; 这样做的意思是,你的这个单例类别人不一定使用,所以没必要提前定义,可能你定义了别人用不到,懒汉之处,在于什么时候使用,是么时候在创建这个对象。
推荐使用恶汉单例模式。懒汉单例模式,可能会出现线程方面的问题。
懒汉模式的单例模式的线程安全问题,之前介绍过单例模式的两种类型,恶汉模式和懒汉模式,当时就有提到懒汉模式的单例模式存在线程安全问题。下面是一种,既考虑线程安全问题又考虑效率问题的解决方案.
1 Class Single 2 { 3 Private Single s; 4 Private Single(){} 5 Public Single getSingle() 6 { 7 If(s == null) 8 { 9 Synchronized(“锁”) 10 { 11 If(s == null) 12 { 13 S = new Single(); 14 } 15 } 16 } 17 Return s; 18 } 19 }
其实,上面加完锁之后就可以保证线程安全了,但是为了提高效率,在外面又加了一层判断,这个可以分析一下,第一次的效率慢一点,以后的效率还是很快的。