Singleton模式指一个类型只能生成一个对象,且不能复制。必须满足:
- 构造、拷贝和解析函数都是private
- 需要用静态成员变量空值对象个数,保证不重复
- 需要有静态的构造函数和析构函数
懒汉模式
我很懒,直到第一次调用类实例时才创建一个新的该类实例
使用双检索实现
public class Singleton {
private static volatile Singleton singleton;
private Singleton() {}
public static Singleton getInstance() {
if (singleton == null) { //第一次判断
synchronized (Singleton.class) { //加所
if (singleton == null) { //第二次判断
singleton = new Singleton();
}
}
}
return singleton;
}
}
饿汉模式
在程序开始时创建该类的实例
public class Singleton {
private static Singleton singleton;
static {
instance = new Singleton();
}
private Singleton() {}
public Singleton getInstance() {
return singleton;
}
}
静态内部类
效果类似双检锁,但实现更简单。只适用于静态域。
public class Singleton {
private Singleton() {}
private static Singleton getInstance() {
}
public static class Innerclasses {
private ststic final Singleton singleton = new Singleton();
};
};