用私有构造器或者枚举类型来实现Singleton属性

方法1

public class Elvis{

public static final Elvis instance=new Elvis();

private Elvis(){}

}

有可能会受到反射机制的攻击,解决方式是在构造器构造第二个实例的时候抛出异常

方法2静态工厂

public class Elvis{

private static final Elvis instance=new Elvis();

private Elvis(){}

public static Elvis getInstance(){ return instance;}

}

序列化的时候需要将属性加上transient

方法3:枚举类型

public enum Elvis{

INSTANCE;

。。。。

}

无偿的提供了序列化机制,可以防止多次实例化。最佳方法

原文地址:https://www.cnblogs.com/macula7/p/1960800.html