Jaki jest najlepszy sposób zaprojektowania klasy singleton, która może rzucić wyjątek?Singleton i wyjątek
Tutaj mam Singleton (używając metody Billa Pugha, udokumentowanej na Wiki dla 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;
}
Jeśli w punkcie 2 zostanie zgłoszony wyjątek, chcę go przekazać rozmówcy. Jednak nie mogę rzucić wyjątku od linii 1.
Czy moja jedyna opcja zwraca obiekt zerowy, jeśli obiekt singleton nie został poprawnie utworzony?
Dzięki
P.S Zdaję sobie sprawę, że to Singleton może złamać jeśli jego ładowane poprzez różne classloaders czy załadowany odruchowo, ale jest wystarczająco dobre dla mojego celu.
// UPDATE
Ciekaw jestem, nie mogę zmienić mojego projektu, jak poniżej rzucać wyjątki?
Ponadto nie potrzebuję żadnej synchronizacji (program ładujący klasy gwarantuje, że statyczna klasa wewnętrzna zostanie załadowana tylko raz i tylko wtedy, gdy wywołana zostanie funkcja getInstance()). W związku z tym wątki bezpieczne i lazily-utworzone?
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();
}
Jeszcze raz dziękuję.
Odpowiedź BalusC jest poprawna, ale zobacz także http://www.yoda.arachsys.com/csharp/singleton.html – finnw
Dzięki. Chociaż wydaje się nieco niezwykłe, aby rzucić błąd. :) – CaptainHastings
@finnw zaktualizowaną wersję linku: http://csharpindepth.com/Articles/General/Singleton.aspx –