版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/seacean2000/article/details/82458958
- 立即加载
- 延迟加载
- 使用静态内置类实现单例模式
- 序列化和反序列化的单例模式实现
- 使用static代码块实现单例模式
- 完善使用enum美剧实现单例模式
1.立即加载的单例模式
public class Singleton {
private static Singleton instance=new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
2.延迟加载的单例模式
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if(null!=instance) {
}else {
synchronized(Singleton.class) {
if(null==instance) {
instance=new Singleton();
}
}
}
return instance;
}
}
3.使用静态内置类实现单例模式,对序列化对象无能为力
public class Singleton {
private Singleton() {
}
private static class SingletonHandle{
private static Singleton Instance=new Singleton();
}
public static Singleton getInstance() {
return SingletonHandle.Instance;
}
}
4.序列化和反序列化的单例模式实现
import java.io.ObjectStreamException;
import java.io.Serializable;
public class Singleton implements Serializable{
private static final long serialVersionUID = 282571242107328345L;
private Singleton() {
}
private static class SingletonHandle{
private static Singleton Instance=new Singleton();
}
public static Singleton getInstance() {
return SingletonHandle.Instance;
}
protected Object readResolve() throws ObjectStreamException{
return SingletonHandle.Instance;
}
}
5.使用static代码块实现单例模式
public class Singleton{
private static Singleton instance;
private Singleton() {
}
static {
instance=new Singleton();
}
public static Singleton getInstance() {
return instance;
}
}
6.完善使用enum枚举实现单例模式
public class Singleton{
public enum SingletonEnum{
singletonEnum;
private Singleton instance;
private SingletonEnum() {
instance=new Singleton();
}
public Singleton getInstance() {
return instance;
}
}
public static Singleton getInstance() {
return SingletonEnum.singletonEnum.getInstance();
}
}
这几种单例模式中,前三种比较多见。