Tom*_*ito 4 java singleton design-patterns
实现单例模式的默认方法是:
class MyClass {
private static MyClass instance;
public static MyClass getInstance() {
if (instance == null) {
instance = new MyClass();
}
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
在一个旧项目中,我试图简化写作:
class MyClass {
private static final MyClass instance = new MyClass();
public static MyClass getInstance() {
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
但它有时会失败.我只是不知道为什么,我做了默认的方式.让SSCCE今天在这里发布,我意识到代码是有效的.
所以,我想知道意见..这是一个随意的失败代码吗?第二种方法是否有可能返回null?我疯了吗?
- 虽然我不知道每个案例的答案是否正确,但@Alfred的回答非常有趣: 我还想指出,单身人士正在测试噩梦,根据大家伙的说法,你应该使用谷歌的依赖性注射框架.
推荐(通过Effective Java 2nd ed)方法是执行"枚举单例模式":
enum MyClass {
INSTANCE;
// rest of singleton goes here
}
Run Code Online (Sandbox Code Playgroud)
这里的关键见解是枚举值是单实例,就像单例一样.因此,通过制作一个单值枚举,你只需要让自己成为一个单身人士.这种方法的优点在于它完全是线程安全的,并且它还可以安全地防止任何允许人们创建其他实例的漏洞.