Android-单例模式-推荐实现方式

523 阅读1分钟

前言

程序设计离不开单例,好记性不如烂笔头,在此记录三种单例的推荐实现方式,直接上手使用。不做单例相关发展的解析。

单例模式定义

确保某一个类只有一个实例,并且自行实例化,向整个系统提供这个唯一实例。

1、DCL式(Double Check Lock)

public class SingletionDLC {

    private volatile static SingletionDLC instance;

    private SingletionDLC() {}

    public static SingletionDLC getInstance() {
        if (instance == null) {
            synchronized (SingletionDLC.class) {
                if (instance == null) {
                    instance = new SingletionDLC();
                }
            }
        }
        return instance;
    }
}

优点介绍:

1、构造函数用private修饰,外部无法访问。 2、使用的时候即调用 getInstance 的时候才初始化。 3、static关键字修饰,静态变量,存储在内存中,只有一份数据。 4、synchronized线程安全,多线程情况下单例的唯一性。 5、两次判断空,避免多次同步(synchronized)。 6、使用 volatile 保证整个方法的执行顺序是按照我们缩写的执行。

2、静态内部类方式

public class SingletionInternalClass {

    private SingletionInternalClass() {}

    public static SingletionInternalClass getInstance() {
        return SingletionInternalClassHolder.instance;
    }

    private static class SingletionInternalClassHolder {
        private static final SingletionInternalClass instance = new SingletionInternalClass();
    }
}

优点介绍:

1、构造函数用private修饰,外部无法访问。 2、使用的时候即调用getInstance的时候才初始化。 3、调用getInstance才回去加载SingletionInternalClassHolder类,确保了线程安全,保证了单例的唯一性。

3、枚举单例

public enum  SingletionEmum {
    INSTANCE;
    public void doSomthing() {
        
    }
}

优点介绍:

枚举在 java 中和普通的类一样,可以有字段和自己的方法。枚举实例的创建时线程安全并且任何情况下它都是一个单例。包括反序列化的时候。