> 技术文档 > java设计模式 -【单例模式】

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; }}