Java 单例模式 (Singleton)

一、单例模式的定义 (Singleton Pattern Definition)

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一的实例。

核心思想:

  • 限制实例化: 防止外部通过 new 关键字创建类的多个实例。
  • 自我创建: 类自身负责创建自己的唯一实例。
  • 全局访问: 提供一个静态方法或静态变量,允许全局访问这个唯一实例。

二、单例模式的目的 (Purpose of Singleton Pattern)

单例模式的主要目的是:

  1. 控制实例数量: 确保一个类在任何情况下都只有一个实例存在。
  2. 节省资源: 避免创建多个相同的对象,节省内存空间和系统资源(例如,创建对象是一个耗时的操作)。
  3. 全局访问: 提供一个全局访问点,方便其他对象访问这个唯一实例,无需传递对象引用。
  4. 数据共享: 在多个模块或组件之间共享数据或状态。
  5. 协调行为: 协调系统中的不同部分的行为,例如,确保只有一个线程池、一个缓存管理器、一个配置对象等。

三、单例模式的实现方式 (Singleton Pattern Implementations)

单例模式有多种实现方式,每种方式都有其优缺点。 以下是常见的几种实现方式:

  1. 饿汉式 (Eager Initialization):

    • 原理: 在类加载时就立即创建单例实例。

    • 优点:

      • 简单,易于实现。
      • 线程安全(由 JVM 保证)。
      • 获取实例的速度快(无需延迟加载)。
    • 缺点:

      • 无论是否使用该实例,都会在类加载时创建,可能造成资源浪费(如果实例的创建比较耗时,或者实例很大)。
      • 无法实现延迟加载。
    • 代码示例:

      public class EagerSingleton {
             
             
          // 私有静态成员变量,在类加载时就创建实例
          private static final EagerSingleton instance = new EagerSingleton();
      
          // 私有构造方法,防止外部创建实例
          private EagerSingleton() {
             
             }
      
          // 公共静态方法,提供全局访问点
          public static EagerSingleton getInstance() {
             
             
              return instance;
          }
      }
      
  2. 懒汉式 (Lazy Initialization) - 线程不安全:

    • 原理: 延迟加载,只有在第一次使用时才创建单例实例。

    • 优点:

      • 避免了不必要的实例创建,节省资源。
      • 实现了延迟加载。
    • 缺点:

      • 线程不安全:在多线程环境下,可能会创建多个实例。
    • 代码示例:

      public class LazySingleton {
             
             
          private static LazySingleton instance;
      
          private LazySingleton() {
             
             }
      
          // 线程不安全
          public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰糖心书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值