Java如何设计一个不被破坏的单例模式呢?

重生 Java经验 发布时间:2024-02-17 17:44:54 阅读数:10950 1
下文笔者讲述设计一个不能被破坏的单例类简介说明

设计不能被破坏的单例模式方法

如果采用枚举类编写单例模式
    则能防止反射和序列化破坏单例
例:枚举类编写单例模式
枚举类单例模式的写法
​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)
枚举类单例模式的实现原理
    主要是由于枚举类没有无参构造器
     所以反射无法进行创建对象
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202402/17081631747965.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者