定义:确保某一个类只有一个实例,而且自行实例化并向整个系统提供整个实例。
使用场景:确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象应该有且只有一个。
懒汉式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public class Singleton { private static Singleton sInstance = null; private Singleton(){ } public void init(){}
public static synchronized Singleton getInstance(){ if (sInstance == null){ sInstance = new Singleton(); } return sInstance; } }
|
饿汉式
1 2 3 4 5 6 7 8 9
| public class Singleton {
private final static Singleton INSTANCE = new Singleton(); private Singleton(){}
public static Singleton getInstance(){ return INSTANCE; }
|
DCL(Double Check Lock)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class Singleton { private static volatile Singleton mInstance = null; private Singleton(){} public void init(){}
public static Singleton getInstance(){ if (mInstance==null){ synchronized (Singleton.class){ if (mInstance == null){ mInstance = new Singleton(); } } } return mInstance; } }
|
静态内部类单例模式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class Singleton { private Singleton(){ } public void init(){}
public static Singleton getInstance(){ return SingletonHolder.sInstance; } private static class SingletonHolder{ private static final Singleton sInstance = new Singleton(); } }
|
枚举单例
1 2 3 4
| public enum Singleton { INSTANCE; public void init(){} }
|