在What is an efficient way to implement a singleton pattern in Java?问题中,最赞成的答案是使用枚举实现单例。
很好,我理解这些论点以及语言优势。
但是,我有一组我定义单例但需要扩展其他类的类,这对于enum方法来说是不可能的,因为enums无法子类。
约书亚·布洛赫(Joshua Bloch)在幻灯片中说:
在大多数情况下,您不应该:有人可以详细说明该吗?我已经实现了几个servlet,它们扩展了HttpServlet
,为什么这些不应该是单例呢?我在我的应用程序中只想要它们的一个实例。
最佳答案
Singleton类可以扩展其他类。实际上,在Java中默认情况下,它将始终扩展Object。但是Josh指的是您不应该扩展Singleton类,因为一旦扩展它,就会存在多个实例。
回答评论:
实际上,实现Singleton的最佳方法是:
从有效的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() { ... }
}
在这里,猫王可以扩展任何其他类别。