使用的场景:在系统中本质上是唯一的,只要一个实例对象
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;
}
本文介绍单例模式的多种实现方式,包括使用静态域、工厂方法及枚举等,并讨论序列化对单例的影响及解决办法。
1467

被折叠的 条评论
为什么被折叠?



