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)
枚举类单例模式的实现原理 主要是由于枚举类没有无参构造器 所以反射无法进行创建对象
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。