枚举方式创建单例对象

public class TestSingleton {

    private TestSingleton(){}

    public static TestSingleton getInstance(){
        return SingletonEnum.INSTANCE.getTest();
    }

    private enum SingletonEnum{
        INSTANCE;

        private TestSingleton singleton = null;
        SingletonEnum(){
            singleton = new TestSingleton();
        }

        private TestSingleton getTest(){
            return singleton;
        }

    }
}

 

转载于:https://www.cnblogs.com/qzg3362/p/9608503.html

### 枚举类实现单例模式的原理 在 Java 中,枚举类作为一种特殊类型的类,具有独特的特性和行为,使其非常适合用于实现单例模式。以下是关于为何枚举类能够作为单例的原因及其背后的原理: #### 1. **构造方法私有化** 枚举类的构造器默认是 `private` 的,这意味着无法通过外部代码直接调用其构造器来创建新的实例[^2]。这种机制确保了只有枚举本身能够在内部控制其实例的数量。 #### 2. **静态常量属性** 每个枚举项本质上是一个 `public static final` 类型的对象。由于这些对象是在编译期就已经确定并初始化的,因此它们在整个程序运行期间都保持不变[^3]。这进一步保障了单一实例的存在性。 #### 3. **防止反射攻击** 即使尝试利用反射技术访问枚举类的私有构造函数,JVM 和 JDK 库中的保护措施也会阻止此类操作成功完成。具体来说,在加载阶段 JVM 就会对枚举类型做额外处理以杜绝非法实例化可能[^1]。 #### 4. **序列化与反序列化安全性** 当涉及到对象持久化时(即序列化/反序列化),普通的懒汉式或者饿汉式单例可能会因为序列化进程而产生多个不同实例的问题。然而对于枚举而言,则完全不必担心这一点——无论何时何地只要读取同一个名称对应的枚举值都会得到最初那个唯一实体副本[^4]。 下面给出一段简单示例展示如何使用枚举形式构建一个线程安全且不易受外界干扰影响的标准单例结构: ```java // Singleton.java public enum Singleton { INSTANCE; public void doSomething() { System.out.println("Executing singleton method."); } } // MainTest.java public class MainTest { public static void main(String[] args) { Singleton instance = Singleton.INSTANCE; instance.doSomething(); } } ``` 以上代码片段清晰表明了借助于枚举方式达成高效简洁版本的单例设计方案是多么方便快捷! --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值