处理必须子类化的单身人士

Mah*_*oni 10 java singleton enums servlets

在问题中什么是在Java中实现单例模式的有效方法?最赞成的回答是,使用Enum来实现单例.

这很好,我理解这些论点,分别是语言优势.

但是,我有一组我定义单例但需要扩展其他类的类,这对于枚举方法是不可能的,因为枚举不能子类化.

约书亚布洛赫在他的幻灯片中说:

  • 但是缺少一件事 - 你无法扩展枚举类型
    • 在大多数情况下,你不应该
    • 一个引人注目的用例操作代码

在大多数情况下你不应该:有人可以详细说明吗?我已经实现了几个servlet并扩展了HttpServlet,为什么这些不应该是单例?我只想在我的应用程序中使用它们的一个实例.

use*_*577 7

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)

在这里,猫王可以扩展任何其他类.

  • 也许我应该说,一个更好的方法.但对你而言,这将是最好的方式,因为你想扩展. (2认同)