Mah*_*oni 10 java singleton enums servlets
在问题中什么是在Java中实现单例模式的有效方法?最赞成的回答是,使用Enum来实现单例.
这很好,我理解这些论点,分别是语言优势.
但是,我有一组我定义单例但需要扩展其他类的类,这对于枚举方法是不可能的,因为枚举不能子类化.
约书亚布洛赫在他的幻灯片中说:
- 但是缺少一件事 - 你无法扩展枚举类型
- 在大多数情况下,你不应该
- 一个引人注目的用例操作代码
在大多数情况下你不应该:有人可以详细说明吗?我已经实现了几个servlet并扩展了HttpServlet,为什么这些不应该是单例?我只想在我的应用程序中使用它们的一个实例.
Singleton类可以扩展其他类; 实际上默认情况下在Java中它无论如何都会扩展Object.然而,Josh所指的是你不应该扩展Singleton类,因为一旦你扩展它,就会有超过1个实例.
回答评论:
实际上,实现Singleton的最佳方法是:
来自Effective Java
// Singleton with static factory
public class Elvis {
private static final Elvis INSTANCE = new Elvis();
private Elvis() { ... }
public static Elvis getInstance() { return INSTANCE; }
public void leaveTheBuilding() { ... }
}
Run Code Online (Sandbox Code Playgroud)
在这里,猫王可以扩展任何其他类.