总结
1、饿汉式:实现简单,安全可靠
2、懒汉式:安全,但是性能较低
3、双重验证:更加安全,但使用时仍需判断
4、静态内部类:懒惰加载,使用时无需判断,但仍存在反射和反序列化的问题
5、枚举:最理想的单例模式!
饿汉式
public final class SingleEhan extends Serializable {
private SingleEhan ( ) {
}
private static final SingleEhan singleEhan = new SingleEhan ( ) ;
public static SingleEhan getSingleEhan ( ) {
return singleEhan;
}
public Object readResolve ( ) {
return singleEhan;
}
}
懒汉式
public final class SingleLanHan {
private static SingleLanHan singleLanHan = null;
private SingleLanHan ( ) { }
public static synchronized SingleLanHan getSingleLanhan ( ) {
if ( singleLanHan!= null) {
return singleLanHan;
}
singleLanHan = new SingleLanHan ( ) ;
return singleLanHan;
}
}
双重验证
public final class SingleDcl {
private static volatile SingleDcl singleDcl = null;
private SingleDcl ( ) {
}
public static SingleDcl getSingleDcl ( ) {
if ( singleDcl!= null) {
return singleDcl;
}
synchronized ( SingleDcl. class ) {
if ( singleDcl!= null) {
return singleDcl;
}
singleDcl = new SingleDcl ( ) ;
}
return singleDcl;
}
}
静态内部类
public final class SingleInnerClass {
private SingleInnerClass ( ) {
}
private static class LazyHolder {
static final SingleInnerClass singleInnerClass = new SingleInnerClass ( ) ;
}
public static SingleInnerClass getSingleInnerClass ( ) {
return LazyHolder. singleInnerClass;
}
}
枚举单例
public enum SingleEnum {
INSTANCE;
public void doSomething ( ) {
}
}