单例模式存在的问题
1.反射可以破解单例模式。
2.反序列化可以破解单例模式。
注:上面的单例模式不包括枚举实现单例模式。
反射破解单例模式
我们以懒汉式为例。
public class SingletonDemo06 {
private static SingletonDemo06 instance;
private SingletonDemo06(){
/*if (instance != null){
throw new RuntimeException();
}*/
}
public static synchronized SingletonDemo06 getInstance(){
if (instance == null){
instance = new SingletonDemo06();
}
return instance;
}
}
public class Client2 {
public static void main(String[] args) throws Exception {
SingletonDemo06 s1 = SingletonDemo06.getInstance();
SingletonDemo06 s2 = SingletonDemo06.getInstance();
System.out.println(s1);
System.out.println(s2);
Class<SingletonDemo06> clazz =
(Cl