单身懒惰加载模式

我正在尝试编写Singleton Lazy Loading Pattern。 这是class级:

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; } } 

我想知道我是否以正确的方式做到了这一点?

提前致谢。

为了简单起见,我更喜欢使用枚举。

 public enum IMDBLookup { INSTANCE; // add fields and methods here. } 

那是正确的。 您可能希望将内部(holder)类简化为private static final IMDBLookup IMDB_LOOKUP = new IMDBLookup(); 为简洁起见(摆脱静态初始化程序块。)

 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; } }