Tengo un conjunto de clases singleton y quiero evitar el código repetitivo. Aquí es lo que tengo ahora:Java singleton con herencia
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
}
}
Esto funciona y no hay nada malo en ello, excepto que tengo muchas subclases de Mammal
que deben replicar el método getInstance()
. Yo preferiría algo como esto, si es posible:
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
}
}
¿Cómo se hace eso?
Su Singleton getInstance() no se realiza correctamente. - en un entorno multi-hilo que pueda ¡Termine con múltiples instancias siendo creadas! – Liv
No es una respuesta a su pregunta, pero su patrón singleton no es seguro para subprocesos. Hay ejemplos en [Concurrencia de Java en la práctica] (http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601). – Bruno
¿Es realmente un singleton el mejor enfoque aquí? Los singletons se usan mejor para representar servicios u otras cosas que realmente solo hay una instancia en el mundo real. Asegúrese de que este patrón sea realmente adecuado para su dominio de aplicación porque supongo que su código no está realmente usando gatos y perros. Si los singleton son apropiados, recomiendo usar la solución de Jim Garrison de usar Spring; los granos de primavera son singleton por defecto. –