Java如何设计一个不被破坏的单例模式呢?
下文笔者讲述设计一个不能被破坏的单例类简介说明
设计不能被破坏的单例模式方法
如果采用枚举类编写单例模式
则能防止反射和序列化破坏单例
例:枚举类编写单例模式
枚举类单例模式的写法
public enum Singleton {
INSTANCE;
}
防止反射破坏单例
例1:无参构造函数
例
package com.java265.a;
import java.lang.reflect.Constructor;
public class Demo {
public static void main(String[] args) {
Class<?> singletonClass = Singleton.class;
try {
Constructor c = singletonClass.getDeclaredConstructor(null);
c.setAccessible(true);
Object singleton1 = c.newInstance();
Object singleton2 = c.newInstance();
System.out.println(singleton1 == singleton2);
} catch (Throwable e) {
e.printStackTrace();
}
}
}
执行结果
java.lang.NoSuchMethodException: org.example.a.Singleton.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.getDeclaredConstructor(Class.java:2178)
at com.java265.a.Demo.main(Demo.java:9)
枚举类单例模式的实现原理
主要是由于枚举类没有无参构造器
所以反射无法进行创建对象
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


