¿Cuál es la mejor manera de diseñar una clase singleton que podría arrojar una excepción?Singleton y Excepción
Aquí tengo un Singleton (usando el método de Bill Pugh, documentado en Wiki para Singleton).
private static class SingletonObjectFactoryHolder{
//1
private static final ObjectFactory INSTANCE = new ObjectFactory();
}
private ObjectFactory() throws Exception{
//2
//create the factory
}
public static ObjectFactory getInstance(){
//3
return SingletonObjectFactoryHolder.INSTANCE;
}
Si se produce una excepción a los 2, me gustaría propagarla a la persona que llama. Sin embargo, no puedo lanzar una excepción desde la línea 1.
Entonces, ¿es mi única opción devolver un objeto nulo si el objeto singleton no se creó correctamente?
Gracias
P.S Soy consciente de que este Singleton puede romperse si su carga a través de diferentes cargadores de clases o si se carga un acto reflejo, pero es lo suficientemente bueno para mi propósito.
// ACTUALIZACIÓN
Soy curioso, ¿no puedo reorganizar mi diseño de la siguiente manera a lanzar excepciones?
Además, no necesito ninguna sincronización (el cargador de clases garantiza que la clase interna estática solo se cargue una vez y solo cuando se llame a getInstance()). Por lo tanto, hilo-seguro y lazily-instanciado?
private static class SingletonObjectFactoryHolder{
//1
public static ObjectFactory getInstance() throws Exception{
return new ObjectFactory();
}
}
private ObjectFactory() throws Exception{
//2
//create the factory
}
public static ObjectFactory getInstance(){
//3
return SingletonObjectFactoryHolder.getInstance();
}
Gracias de nuevo.
La respuesta de BalusC es correcta, pero vea también http://www.yoda.arachsys.com/csharp/singleton.html – finnw
Gracias. Aunque se siente un poco inusual lanzar un error. :) – CaptainHastings
@finnw versión actualizada del enlace: http://csharpindepth.com/Articles/General/Singleton.aspx –