【发布时间】:2015-01-08 00:43:21
【问题描述】:
有时需要继承单例,但因为在单例中您使用的是无法覆盖的静态引用和静态方法。
例如(Java):
public class Singleton {
private static Singleton instance = null;
public static Singleton getInstance() {
if (instance == null)
instance = new Singleton();
return instance;
}
}
如果我用“SingletonChild”类继承“Singleton”,我将无法通过调用 getInstance() 方法生成实例。如果我将创建另一个 getInstanceChild() 方法,则基本方法:getInstance() 也将被公开。
【问题讨论】:
-
真正的单例通常需要有一个
private构造函数。您将无法扩展该类。 -
Singleton 也会导致他们解决的更多问题,这就是为什么在大多数情况下它被认为是一种反模式。见this post。向它添加继承会使情况变得更糟恕我直言。
-
单例的想法是你的系统中只有一个。当您从一个类继承时,您的对象仍然是父类的一个实例(多态)。因此,它的第二个实例将违反单例合同。也许你应该考虑你真正需要什么,而不是单例。
-
考虑这一点:您正在编写一些具有一些全局功能的库作为单例,应该根据目标使用情况进行扩展。
标签: java design-patterns singleton