当前位置: 首页 > 面试题库 >

单例模式:使用枚举版本

楚良平
2023-03-14
问题内容

我不了解如何实现模式的Enum版本Singleton。下面是使用Singleton模式实现“传统”方法的示例。我想将其更改为使用Enum版本,但不确定如何。

public class WirelessSensorFactory implements ISensorFactory{

    private static WirelessSensorFactory wirelessSensorFactory;

    //Private Const
    private WirelessSensorFactory(){
        System.out.println("WIRELESS SENSOR FACTORY");
    }

    public static WirelessSensorFactory getWirelessFactory(){

        if(wirelessSensorFactory==null){
            wirelessSensorFactory= new WirelessSensorFactory();
        }

        return wirelessSensorFactory;
    }

}

问题答案:
public enum WirelessSensorFactory {
    INSTANCE;

    // all the methods you want
}

这是您的单例:一个只有一个实例的枚举。

请注意,此单例是线程安全的,而您的不是:线程安全的:两个线程可能都陷入竞争状况或可见性问题,并且都创建了自己的单例实例。



 类似资料:
  • 本文向大家介绍枚举单例 线程安全-Java版相关面试题,主要包含被问及枚举单例 线程安全-Java版时的应答技巧和注意事项,需要的朋友参考一下 用枚举写单例实在太简单了!这也是它最大的优点。下面这段代码就是声明枚举实例的通常做法。 我们可以通过EasySingleton.INSTANCE来访问实例,这比调用getInstance()方法简单多了。创建枚举默认就是线程安全的,所以不需要担心doubl

  • 让我们看看一个需要诉诸于代码的场景,来考虑为何此时使用枚举更为合适且实用。假设我们要处理 IP 地址。目前被广泛使用的两个主要 IP 标准:IPv4(version four)和 IPv6(version six)。这是我们的程序可能会遇到的所有可能的 IP 地址类型:所以可以 枚举 出所有可能的值,这也正是此枚举名字的由来。 任何一个 IP 地址要么是 IPv4 的要么是 IPv6 的,而且不能

  • 本文向大家介绍JAVA 枚举单例模式及源码分析的实例详解,包括了JAVA 枚举单例模式及源码分析的实例详解的使用技巧和注意事项,需要的朋友参考一下 JAVA 枚举单例模式及源码分析的实例详解       单例模式的实现有很多种,网上也分析了如今实现单利模式最好用枚举,好处不外乎三点: 1.线程安全 2.不会因为序列化而产生新实例 3.防止反射攻击但是貌似没有一篇文章解释ENUM单例如何实现了上述三

  • 如何使用单例模式 可以看下这个图: 这是一个日志类,有一个属性 (是一个单例对象) 和两个方法 (sharedInstance() 和 init())。 第一次调用 sharedInstance() 的时候,instance 属性还没有初始化。所以我们要创建一个新实例并且返回。 下一次你再调用 sharedInstance() 的时候,instance 已经初始化完成,直接返回即可。这个逻辑确保了

  • 问题内容: 彼得·劳瑞在他的博客上写了关于枚举的两种用法,大多数人都忘记了。 首先,我没有忘记-我什至没有意识到:) 这些方法很不错,简洁-是否有任何好处比其他简洁与实现同样的事情的更传统的方式,如使用比较类与构造函数工具类? 另外,是否有任何问题(除了使不期望的程序员感到困惑之外)? 问题答案: 我真的不同意该帖子中对的首次使用。如果您想要一个无法实例化的实用程序类,只需为其提供一个私有构造函数

  • 问题内容: 枚举被认为是单例的最佳方式,其原因之一是它隐式继承。 但是,枚举如何防止单例的反序列化问题? 问题答案: 序列化机制以特殊的特定方式处理它们。但是,可以通过定义返回唯一实例的方法来对传统的单例进行反序列化。有关示例,请参见http://www.oodesign.com/singleton- pattern.html 。