2012-02-19 8 views
2

Я пытаюсь написать шаблон загрузки Singleton Lazy. Вот этот класс:Singleton Lazy Загрузка шаблона

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

Я предпочитаю использовать перечисление для простоты.

public enum IMDBLookup { 
    INSTANCE; 
    // add fields and methods here. 
} 
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; 
    } 
}