Android单例实践(2019-12-04)

单例在一些地方很有用,特别是那些在逻辑概念上有“唯一”的时候。比如,用户信息,就算有多用户切换,当前用户也只有一个,所以适合用单例。再比如,图片缓存,只需要一个就够了,多了也没有意义。

双重检查锁定模式

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;
}

参考文章

Android 设计模式之单例模式
Android 中的单例模式

你可能感兴趣的:(Android单例实践(2019-12-04))