我有一组单例类,我想避免使用样板代码。这就是我现在所拥有的:
public class Mammal {
protected Mammal() {}
}
public class Cat extends Mammal {
static protected Cat instance = null;
static public Cat getInstance() {
if (null == instance) {
instance = new Cat();
}
return instance;
}
private Cat() {
// something cat-specific
}
}
这有效并且它没有任何问题,除了我有许多Mammal
的子类必须复制getInstance()
方法。如果可能的话,我更喜欢这样的事情:
public class Mammal {
protected Mammal() {}
static protected Mammal instance = null;
static public Mammal getInstance() {
if (null == instance) {
instance = new Mammal();
}
return instance;
}
}
public class Cat extends Mammal {
private Cat() {
// something cat-specific
}
}
我该怎么做?
答案 0 :(得分:3)
你不能因为构造函数既不是继承的也不是可覆盖的。您所需示例中的new Mammal()
仅创建Mammal
,而不是其子类之一。我建议你看一下Factory模式,或者去看一下像Spring这样的东西。
答案 1 :(得分:3)
您可以使用enum
创建单身人士。
public enum Mammal {
Cat {
// put custom fields and methods here
}
}
答案 2 :(得分:0)
将您的构造函数设为私有,这将阻止您的类被其他类继承。
创建单例的最佳方法是使用一个枚举创建一个包含枚举的类。(Josh Block)