我有两个“Initialization-on-demand holder idiom”的版本:
- 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 之间的区别:
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.getInstance().getX()
的东西,因此两种版本都能正常工作。因此我想知道它们的使用情况。