java设计模式 -【单例模式】
单例模式的定义
单例模式(Singleton Pattern)是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。常用于需要控制资源或共享状态的场景,例如数据库连接、日志记录器等
单例模式的实现方式
饿汉式(Eager Initialization)
在类加载时直接创建实例,线程安全但可能造成资源浪费
public class EagerSingleton { private static final EagerSingleton instance = new EagerSingleton(); private EagerSingleton() {} public static EagerSingleton getInstance() { return instance; }}
懒汉式(Lazy Initialization)
在第一次调用时创建实例,需加锁保证线程安全
public class LazySingleton { private static LazySingleton instance; private LazySingleton() {} public static synchronized LazySingleton getInstance() { if (instance == null) { instance = new LazySingleton(); } return instance; }}
双重检查锁(Double-Checked Locking)
减少同步开销,仅在实例未初始化时加锁
public class DoubleCheckedSingleton { private static volatile DoubleCheckedSingleton instance; private DoubleCheckedSingleton() {} public static DoubleCheckedSingleton getInstance() { if (instance == null) { synchronized (DoubleCheckedSingleton.class) { if (instance == null) { instance = new DoubleCheckedSingleton(); } } } return instance; }}
静态内部类(Static Nested Class)
利用类加载机制保证线程安全,且延迟初始化
public class StaticNestedSingleton { private StaticNestedSingleton() {} private static class Holder { static final StaticNestedSingleton INSTANCE = new StaticNestedSingleton(); } public static StaticNestedSingleton getInstance() { return Holder.INSTANCE; }}