定义
单例模式是创建型模式,确保在一个进程内,单例类只有一个对象
要求
- 构造函数私有化
- 防止多线程初始化
- 不可克隆和不可序列化
- 公共静态方法获取实例
实现
枚举类
public enum Singleton {
INSTANCE;
public void dosomething() {}
}
静态内部类
class Singleton {
/**
* 私有化构造函数
*/
private Singleton() {
}
/**
* 静态内部类
*/
private static class InstanceHolder {
private static final Singleton instance = new Singleton();
}
/**
* 公共静态方法获取单例
* @return
*/
public static Singleton getInstance() {
return InstanceHolder.instance;
}
}
双重检查锁
class Singleton {
private static volatile Singleton instance = null;
/**
* 私有化构造函数
*/
private Singleton() {
}
public static Singleton getInstance() {
if (instance != null) {
synchronized (Singleton.class) {
if (instance != null) {
instance = new Singleton();
}
}
}
return instance;
}
}
思考
以上实现是否能够防止被利用反射创建实例