【发布时间】:2015-03-26 17:12:22
【问题描述】:
当我想通过在 Java 语言中使用继承来重用单例模式时,一些有趣的事情让我感到困惑。想和大家分享一下,求大家重用Singleton的解决方案。 我的代码如下。
// Singleton.java
public class Singleton {
private static Singleton mSingletonInstance;
protected Singleton() {
System.out.println("New Singleton Instance.");
}
public static Singleton getInstance() {
if (mSingletonInstance == null)
mSingletonInstance = new Singleton();
return mSingletonInstance;
}
}
// ExtendedSingleton.java
public class ExtendedSingleton extends Singleton{
private static ExtendedSingleton mExtendedSingleton;
private ExtendedSingleton() {
super();
System.out.println("New Extended Singleton Instance.");
}
public static ExtendedSingleton getInstance() {
if (mExtendedSingleton == null)
mExtendedSingleton = new ExtendedSingleton();
return mExtendedSingleton;
}
public static void main(String args[]) {
ExtendedSingleton extendedSingleton = ExtendedSingleton.getInstance();
}
}
当然,我可以毫无例外地运行这些代码。但我的意图是通过扩展 Singleton 基类来重用 Singleton 模式。但是,我必须重新键入子类中的所有代码,而且我根本没有重用任何东西,这甚至在我需要时编写一个单独的 Singleton 类更好。我真的很困惑。谁能告诉我如何重用单例模式。 随意修正我的英语,我知道我一定有很多错误。
【问题讨论】:
-
这是单例模式的问题之一:您不能轻易地从单例继承。 (这不是唯一的问题)在我看来,单例在许多情况下是一种反模式。
标签: java design-patterns