gpt4 book ai didi

java - 单例(传统与枚举)

转载 作者:行者123 更新时间:2023-12-02 13:40:47 25 4
gpt4 key购买 nike

免责声明:如果这个问题太基础,我们深表歉意。

我正在学习 Singleton,并对其实现有一个快速疑问,这些差异纯粹是编码偏好还是我遗漏了什么?

单例类

public enum SerialNumberGen {
INSTANCE;

private int count;

public synchronized int getNextSerial(){
return count++;
}

实现示例

.println(SerialNumberGenerator.INSTANCE.getNextSerial());

我的实现

SerialNumberGen gen = SerialNumberGen.INSTANCE;
System.out.println(gen.getNextSerial());

我的实现仍然遵循单例模式吗?或者这就是枚举类应该被引用的方式。

谢谢。

最佳答案

Is my implementation still adhering to the Singleton pattern?

是的。您仍然只有一个 SerialNumberGen 实例。

除了第二种情况中的附加变量之外,两者之间没有区别。

<小时/>

您应该仔细考虑是否拥有可变的枚举The view epoused by Google's Java libraries team是:

Static state is dangerous to begin with, but much worse for enums. We all think of enum values as constants – and even refer to them as “enum constants” – and would be very surprised if any of their state ever changed, or was not thread-safe.

虽然枚举是创建线程安全的单例的便捷方法,但它们不一定非常适合您在这里所做的事情。

对我来说,这里更大的问题是为什么你认为你需要一个单例?我建议你阅读并彻底考虑What is so bad about singletons? .

这里没有任何东西真正需要单例。您只需拥有 SerialNumberGen 的单个实例,即可将其注入(inject)到需要它的任何地方。

关于java - 单例(传统与枚举),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com