- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
免责声明:如果这个问题太基础,我们深表歉意。
我正在学习 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/
我是一名优秀的程序员,十分优秀!