使用的场景:在系统中本质上是唯一的,只要一个实例对象
jdk1.5之前的实现方式
/**
* 单例的实现方式1
*/
public class SingLeton {
// 静态final域
public static final SingLeton INSTANCE = new SingLeton();
// 私有
private SingLeton() {
}
}
变成可序列化
public class SingLeton implements Serializable {
// 静态final域
public static final SingLeton INSTANCE = new SingLeton();
// 私有
private SingLeton() {
}
// 保证singleton属性,加readResolve,并且实力域要用transient修饰
public Object readResolve() {
return INSTANCE;
}
}
/**
*单例的实现方式2
*/
public class SingLeton2 {
// 私有
public static final SingLeton2 INSTANCE = new SingLeton2();
// 私有
private SingLeton2() {
}
// 静态工厂方法
public static SingLeton2 getInstance() {
return INSTANCE;
}
}
变成可序列化
public class SingLeton2 implements Serializable {
// 私有
private static final SingLeton2 INSTANCE = new SingLeton2();
// 私有
private SingLeton2() {
}
// 静态工厂方法
public static SingLeton2 getInstance() {
return INSTANCE;
}
// 保证singleton属性,加readResolve,并且实力域要用transient修饰
public Object readResolve() {
return INSTANCE;
}
}
jdk1.5之后的实现方式
/**
* 方法3:枚举(单元素的枚举是singleton最佳实践,无偿提供序列化机制,绝对防止多次实例化)
*/
public enum SingLeton3 {
INSTANCE;
}