什麼是設計一個可能拋出異常的單例類的最佳方式?單身人士和例外
在這裏,我有一個單身人士(使用Bill Pugh的方法,記錄在Wiki for 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;
}
如果在2引發異常,我想將它傳播給調用者。 但是,我不能從第1行拋出異常。
所以,如果單身人士對象沒有被正確創建,是我唯一的選擇返回空對象嗎?
感謝
P.S我不知道這辛格爾頓可以打破如果通過不同類加載器加載,或者加載本能,但它不夠好我的目的。
// UPDATE
我很好奇,我不能重新安排如下我的設計拋出異常?另外,我不需要任何同步(類加載器保證靜態內部類只會在調用getInstance()時才加載一次)。因此,線程安全和懶惰實例化?
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();
}
再次感謝。
BalusC的答案是正確的,但也請參閱http://www.yoda.arachsys.com/csharp/singleton.html – finnw 2010-02-18 00:31:05
謝謝。儘管拋出錯誤確實感覺有點不尋常。 :) – CaptainHastings 2010-02-18 16:41:20
@finnw更新版本的鏈接:http://csharpindepth.com/Articles/General/Singleton.aspx – 2012-04-25 21:13:35