2012-02-19 38 views
2

我正在嘗試寫一個Singleton懶加載模式。這裏是這個類:Singleton懶加載模式

public class IMDBLookup { 

    private static class LazyLoad { 
     private static final IMDBLookup IMDB_LOOKUP; 

     static { 
      IMDB_LOOKUP = new IMDBLookup(); 
     } 
    } 

    public static IMDBLookup getInstance() { 
     return IMDBLookup.LazyLoad.IMDB_LOOKUP; 
    } 
} 

我想知道我是否以正確的方式做它?

在此先感謝。

回答

2

爲了簡單起見,我更喜歡使用枚舉。

​​
1

這是正確的。你可能想簡化內部(持有者)類爲private static final IMDBLookup IMDB_LOOKUP = new IMDBLookup();(爲了擺脫靜態初始化塊)。

1
public class IMDBLookup { 

    private IMDBLookup(){ 
     // without this I do not get why is it a singleton 
     // anyone could create instances of your class by the thousands 
    } 

    private static class LazyLoad { 
     private static final IMDBLookup IMDB_LOOKUP; 

     static { 
      IMDB_LOOKUP = new IMDBLookup(); 
     } 
    } 

    public static IMDBLookup getInstance() { 
     return IMDBLookup.LazyLoad.IMDB_LOOKUP; 
    } 
} 

,你或許應該使用枚舉(不能完全肯定我這樣做的權利)

public class IMDBLookup { 

    private IMDBLookup(){ 
    } 

    private static enum LazyLoad { 
     IMDB_LOOKUP_INSTANCE; 
     private static final IMDB_LOOKUP = new IMDBLookup(); 
    } 

    public static IMDBLookup getInstance() { 
     return LazyLoad.IMDB_LOOKUP_INSTANCE.IMDB_LOOKUP; 
    } 
}