方法1.公共的静态成员
私有化构造器,是外部想要得到该实例,只能调用其静态方法,保证了单例模式。
若直接公共域静态成员,但客户端可通过AccessibleObject.setAccessible方法,通过反射机制调用私有构造器,对单例模式产生攻击。需做单例保护,若出现第二个实例,则抛出异常。
public class Evlis{
public static final Evlis INSTANCE = new Evlis();
private Evlis(){};
}
方法2.公有的静态工厂方法
公有域方法的好处:
1.方法已表明这是一个单例对象
2.灵活,在API不变的情况下,可以改变是否是单例模式
public class Evlis{
private static final Evlis INSTANCE = new Evlis();
private Eclis(){};
public static Evlis getInstance(){
return INSTANCE;
}
}
若需使getInstance方法实现序列化,可在Evlis类中加入如下方法
private Object readResolve(){
return INSTANCE;
}
方法3.通过枚举实现单例模式
public enum Evlis{
INSTANCE;
public void leaveTheBuilding(){};
}
//调用的时候
Evlis.INSTANCE.leaveTheBuilding();