假设我们有基类:
public class Base {
public Base(int i) {
/* ... */
}
/* ... */
}
我们要基于这个类创建单例。问题是类有公共(public)构造函数,所以扩展它会导致单例也有公共(public)构造函数:
public class SingletonBase extends Base {
private static final SingletonBase _instance = new SingletonBase();
private SingletonBase() {
super(0);
}
public SingletonBase(int i) { // Want to avoid this!
super(i)
}
public static void getInstance() {
return _instance;
}
/* ... */
}
Singleton当然不能有public构造函数,所以我们要避免这种情况。 那么,什么是最优雅的方式/模式来让适当的 Singleton 具有 Base 类的功能?
编辑:禁止修改基类,因为它来自外部库。
最佳答案
构造函数不是继承的。所以只是
删除这部分,你会得到你需要的。
public SingletonBase(int i) { // Want to avoid this!
super(i)
}
此外,您可能需要创建 Base
类
抽象以便任何人都不会错误地实例化它
通过直接调用 Base
构造函数。
public abstract class Base {
public Base(int i) {
/* ... */
}
/* ... */
}
public class SingletonBase extends Base {
private static final SingletonBase _instance = new SingletonBase();
private SingletonBase() {
super(0);
}
public static SingletonBase getInstance() {
return _instance;
}
/* ... */
}
关于Java:来自基类的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665410/