我有一组单例类,我想避免样板代码。以下是我现在有:继承的Java单例
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
}
}
我该怎么做?
你单身getInstance()方法是不是正确实施 - 在多线程环境中,你可以最终创建多个实例! – Liv 2011-06-10 15:58:29
不是你的问题的答案,但你的单身模式不是线程安全的。有[Java并发实践]中的示例(http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601)。 – Bruno 2011-06-10 16:00:40
单身真的是最好的方法吗?单身人士最好用来表示服务或其他真实世界中只有一个实例的东西。确保这种模式非常适合你的应用领域,因为我会假设你的代码并不真正使用猫和狗。如果单身人士合适,我建议使用Jim Garrison的使用Spring的解决方案;春季豆类默认为单身。 – 2011-06-10 16:56:45