单例】为什么用枚举类来实现单例模式越来越流行?

2022-02-16 19:10发布

8条回答
不吃鱼的猫
2楼 · 2022-02-17 14:19

利用枚举的特性,让JVM来帮我们保证线程安全和单一实例

单例的好处

只有一个对象,内存开支少、性能好

避免对资源的多重占用

在系统设置全局访问点,优化和共享资源访问


20200921文 - 做更棒的自己!
4楼 · 2022-02-18 15:28

java单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。 特点: 1,一个类只能有一个实例; 2,自己创建这个实例; 3,整个系统都要使用这个实例。 -------------------------------- Singleton模式主要作用是保证

请叫我雷锋叔叔啊
5楼 · 2022-02-18 17:02

其他的都需要额外的工作 (Serializable、transient、readResolve()) 来实现序列化,否则每次反序列化一个序列化的对象实例时都会创建一个新的实例。而枚举类就很简单


摩羯摩羯
6楼 · 2022-02-21 14:56

单例模式实现方式有很多:在第一次使用的时候创建(构造函数中判断是否已经有实例存在),在类加载的时候用静态块儿创建(静态块初始化),在应用启动的时候创建。

在单线程中,基本大同小异,保证类的实例在整个应用中只有一个,都是没问题的。
但是在多线程环境下,什么时候创建这个实例是要考虑线程安全的。

枚举类型最大的特点就是:构造函数是private修饰的,也就是不能对其进行new,对象的实例都是预定义的,也就是在类加载的时候都是定义好了的,不会给其它调用去创建实例的机会。
结论是,可以模拟这个思路去创建单例,不一定非得用枚举,但是推荐用使用定义枚举的方式去实现单例模式

希希
7楼 · 2022-03-01 15:03

只有一个对象,内存开支少、性能好

避免对资源的多重占用

在系统设置全局访问点,优化和共享资源访问


回答: 2022-03-01 15:37

其他的都需要额外的工作 (Serializable、transient、readResolve()) 来实现序列化,否则每次反序列化一个序列化的对象实例时都会创建一个新的实例。

回答: 2022-03-10 10:37

避免对资源的多重占用

在系统设置全局访问点,优化和共享资源访问




小小123
8楼 · 2022-03-09 09:27

枚举类型最大的特点就是:构造函数是private修饰的,也就是不能对其进行new,对象的实例都是预定义的,也就是在类加载的时候都是定义好了的,不会给其它调用去创建实例的机会。
结论是,可以模拟这个思路去创建单例,不一定非得用枚举,但是推荐用使用定义枚举的方式去实现单例模式

回答: 2022-03-15 13:46

其他的都需要额外的工作 (Serializable、transient、readResolve()) 来实现序列化,否则每次反序列化一个序列化的对象实例时都会创建一个新的实例。而枚举类就很简单



IT学习助手 - qq:2676427015
9楼 · 2022-03-24 10:14

1、减少系统资源开销,由于单例只保留一个对象。

2、提高创建速度,每次都获取已经存在的对象因此提高创建速度。

3、全局共享对象,由于单例在系统中只存在一个对象实例,因此任何地方使用此对象都是一个对象。

4、避免多实例创建使用时产生的逻辑错误。

使用案例:

线程池、缓存、日志对象、打印机、显卡的驱动程序


相关问题推荐

  • 回答 4

    在我看来,单例模式可以避免资源空间的浪费,只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。...

  • 回答 5

    多线程中,单例模式并非线程安全,即便是加上了synchronized关键字

  • 回答 6

    1.         单例模式和多例模式属于对象模式。2.         单例模式的对象在整个系统中只有一份,多例模式可以有多个实例。3.         它们都不对外提供构造方法,即构造方法都为私有。...

  • 回答 7

    单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实...

  • 回答 6

    经典版单例模式public class Singleton {        private static Singleton uniqueInstance;//利用一个静态常量来记录singleton类的唯一实例。     private Singleton() {     }     public static  Singleton getInstance()...

没有解决我的问题,去提问