单例模式1.1饿汉式12345678910111213/** * 单例模式-饿汉式 */public class SingleTon1 { private static SingleTon1 mInstance = new SingleTon1(); private SingleTon1() {//私有构造方法 } public static SingleTon1 getInstance() {//提供静态方法,获取对象实例 return mInstance; }} 1.2懒汉式懒汉式-线程不安全 123456789101112131415/** * 单例模式-懒汉式(线程不安全) */public class SingleTon2 { private static SingleTon2 mInstance; private SingleTon2() {} public static SingleTon2 getInstance() { if (mInstance == null) { mInstance = new SingleTon2(); } return mInstance; }} 1.3DCL单例1234567891011121314151617181920/** * 单例模式-DCL单例 * 使用volatile + synchronized 保证线程安全 */public class SingleTon3 { private static volatile SingleTon3 mInstance; private SingleTon3() {} public static SingleTon3 getInstance() { if (mInstance == null) { synchronized (SingleTon3.class) { if (mInstance == null) { mInstance = new SingleTon3(); } } } return mInstance; }} 1.4静态内部类单例12345678910111213141516/** * 单例模式-静态内部类单例 * 静态内部类的优点是:外部类加载时并不需要立即加载内部类,内部类不被加载则不去初始化INSTANCE,故而不占内存 * 只有当getInstance()方法第一次被调用时,才会去初始化INSTANCE */public class SingleTon4 { private SingleTon4() { } private static class Holder{ private static volatile SingleTon4 mInstance = new SingleTon4(); } public static SingleTon4 getInstance() { return Holder.mInstance; }} 1.5容器类单例1234567891011121314151617/** * 单例模式-容器类单例 */public class SingleTon5 { private SingleTon5() { } private static Map<String,Object> map = new HashMap<>(); public static void registerService(String key,Object value){ if (!map.containsKey(key)){ map.put(key,value); } } public static Object getService(String key){ return map.get(key); }}