1.单例模式特点
- ·构造方法私有化
- ·实例化的变量引用私有化;
- ·获取实例的方法共有
2.单例模式应用模式
- ·整个程序的运行中只允许有一个类的实例;
- ·需要频繁实例化然后销毁的对象。
- ·创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
- ·方便资源相互通信的环境
3.Java中单例模式N种写法
这种方式最简单,缺点是类加载时就会实例化对象
1) 饿汉式
/** * 饿汉式 */ public class EaterSingleton { private static final EaterSingleton INSTANCE = new EaterSingleton(); private EaterSingleton() { } public static EaterSingleton getInstance() { return INSTANCE; } }
2). 懒汉模式-双重验证
线程安全,延迟初始化。这种方式采用双锁机制,安全且在多线程情况下能保持高性能。
/** * 懒汉双重验证 */ public class DoubleCheckSingleton { private volatile static DoubleCheckSingleton INSTANCE = null; private DoubleCheckSingleton() { } public static DoubleCheckSingleton getInstance() { if (INSTANCE == null) { synchronized (DoubleCheckSingleton.class) { if (INSTANCE == null) { INSTANCE = new DoubleCheckSingleton(); } } } return INSTANCE; } }
3). 静态内部类-单例模式
JVM保证单例,加载外部类时不会加载内部类,这样可以实现懒加载
package com.bytearch.designPattern.singleton; /** * 内部类 * 加载外部类时不会加载内部类 */ public class AnonymousInnerClsSingleton { private AnonymousInnerClsSingleton() { } private static class LazyHolder { private final static AnonymousInnerClsSingleton INSTANCE = new AnonymousInnerClsSingleton(); } public static AnonymousInnerClsSingleton getInstance() { return LazyHolder.INSTANCE; } }