单列模式就是保证类只有一个实例。接下来看下实现单列模式的方法:
package com.djk.design.danlie;
public class Single
{
private static Single single = null;
private Single()
{
}
public static Single getInstance()
{
if(null ==single)
{
single = new Single();
}
return single;
}
}
这种模式下在多线程的环境下可能会产生多个实例。
package com.djk.design.danlie;
public class Single2
{
private static Single2 single = null;
private Single2()
{
}
public synchronized static Single2 getInstance()
{
if(null ==single)
{
single = new Single2();
}
return single;
}
}
这种情况下的单列由于在方法同步的情况下所以得到单实例对象的时候效率会降低。
package com.djk.design.danlie;
public class Single2
{
private static Single2 single = null;
private Single2()
{
}
public static Single2 getInstance()
{
if(null ==single)
{
synchronized (Single2.class) {
if(null ==single)
{
single = new Single2();
}
}
}
return single;
}
}
这种情况下的单列只有在对象为空的情况下才会同步,把同步的粒度降低了。
package com.djk.design.danlie;
public class Single2
{
private static Single2 single = new Single2() ;
private Single2()
{
}
public static Single2 getInstance()
{
return single;
}
}
这种单列在调用静态方法的时候就生产单实例不存在线程安全问题。。。。