考虑以下实现
public enum Singleton {
INSTANCE;
private final OnlyOne onlyOne;
Singleton() {
onlyOne = new OnlyOne();
}
public static Singleton getInstance() {
return INSTANCE;
}
public static void main(String[] args) {
Singleton one = getInstance();
one.onlyOne.method();
}
}
class OnlyOne {
public void method() {
System.out.println("Hello World");
}
}
这里我尝试使用enum
实现Singleton。我希望OnlyOne
只有一个实例。我的问题是如何限制客户端实例化类OnlyOne
的对象?因为在其他一些课程中我们可以很容易地做到这一点
OnlyOne one = new OnlyOne();
我无法为它提供私有构造函数,因为这样做会破坏这个
Singleton() {
onlyOne = new OnlyOne();
}
我是否需要将枚举用作OnlyOne
类的内部成员?有什么建议吗?
答案 0 :(得分:3)
INSTANCE本身就是单身人士。将您的方法直接添加到枚举。
public static void main(String[] args) {
Singleton.INSTANCE.method();
}
public enum Singleton {
INSTANCE;
public void method() {
System.out.println(this);
}
}