У меня есть две версии "Инициализация по требованию":
- http://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom
- http://en.wikipedia.org/wiki/Singleton_pattern#The_solution_of_Bill_Pugh
Основное различие между приведенным выше состоит в том, что первая объявила INSTANCE
как private, а вторая объявила INSTANCE
как public.
Скажите, пожалуйста, какой из них я должен использовать.
Извините, я не нашел разницы между использованием private и общедоступной в моем приложении:
public class Singleton {
private int x;
public int getX() {
return x;
}
private Singleton () {}
private static class LazyHolder {
//both private and public works
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
}
Единственное, что я делаю, это называть что-то вроде Singleton.getInsance().getX()
, поэтому обе версии работают.
Поэтому я хочу знать ситуации для их использования.