单例在一些地方很有用,特别是那些在逻辑概念上有“唯一”的时候。比如,用户信息,就算有多用户切换,当前用户也只有一个,所以适合用单例。再比如,图片缓存,只需要一个就够了,多了也没有意义。
双重检查锁定模式
Double Check Lock(DCL)模式(双重检查锁定模式)。这个可以当做首选的模式来用。
public class Singleton {
private volatile static Singleton singleton = null;
//构造函数私有化
private Singleton() {
}
//公有的静态函数,对外暴露获取单例对象的接口
public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}
静态内部类模式
public class Singleton {
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.sInstance;
}
//静态内部类
private static class SingletonHolder {
private static final Singleton sInstance = new Singleton();
}
}
代码模板
// 定义单例静态变量
private volatile static $class$ instance = null;
// 构造函数私有化
private $class$() {}
// 获取单例对象方法
public static $class$ getInstance() {
if (instance == null) {
synchronized ($class$.class) {
if (instance == null) {
instance = new $class$();
}
}
}
return instance;
}
网友评论