一、单例模式的定义 (Singleton Pattern Definition)
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一的实例。
核心思想:
- 限制实例化: 防止外部通过
new关键字创建类的多个实例。 - 自我创建: 类自身负责创建自己的唯一实例。
- 全局访问: 提供一个静态方法或静态变量,允许全局访问这个唯一实例。
二、单例模式的目的 (Purpose of Singleton Pattern)
单例模式的主要目的是:
- 控制实例数量: 确保一个类在任何情况下都只有一个实例存在。
- 节省资源: 避免创建多个相同的对象,节省内存空间和系统资源(例如,创建对象是一个耗时的操作)。
- 全局访问: 提供一个全局访问点,方便其他对象访问这个唯一实例,无需传递对象引用。
- 数据共享: 在多个模块或组件之间共享数据或状态。
- 协调行为: 协调系统中的不同部分的行为,例如,确保只有一个线程池、一个缓存管理器、一个配置对象等。
三、单例模式的实现方式 (Singleton Pattern Implementations)
单例模式有多种实现方式,每种方式都有其优缺点。 以下是常见的几种实现方式:
-
饿汉式 (Eager Initialization):
-
原理: 在类加载时就立即创建单例实例。
-
优点:
- 简单,易于实现。
- 线程安全(由 JVM 保证)。
- 获取实例的速度快(无需延迟加载)。
-
缺点:
- 无论是否使用该实例,都会在类加载时创建,可能造成资源浪费(如果实例的创建比较耗时,或者实例很大)。
- 无法实现延迟加载。
-
代码示例:
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
-

最低0.47元/天 解锁文章
101万+

被折叠的 条评论
为什么被折叠?



