限制构造方法为私有方法是为了确保调用者不能通过构造方法来创建对象,也就是确保该类的对象是单例的。
例子:
...
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {.....}
public Singletone getInstance() {return instance;}
}
...
此种方式的安全性比较差,也就是可以通过setAccessible()方法来将构造函数设置成可见,然后通过反射来创建对象。
通过枚举类型来实现单例
例子:
...
public enum Singleton {
INSTANCE;
......
}
...
此种方式安全性比较高,实现也相对比较简单,但是如果类需要继承Enum以外的父类时就无法使用该方式(尽管可以声明一个Enum来实现接口)。