Java设计模式:单例模式(饿汉式、懒汉式、枚举实现类)

❤ 作者主页:欢迎来到我的技术博客😎
❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~*
🍊 如果文章对您有帮助,记得关注点赞收藏评论⭐️⭐️⭐️
📣 您的支持将是我创作的动力,让我们一起加油进步吧!!!🎉🎉

一、什么是单例模式

单例模式 指在内存中只会创建且仅创建一次对象的设计模式。

在程序中 多次使用同一对象且作用相同 时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中 创建一个对象,让所有需要调用的地方都 共享 这一单例对象。

未使用单例模式:
在这里插入图片描述
 

使用单例模式:
在这里插入图片描述
 


二、单例模式的结构

单例模式通常由以下几个组成部分构成:

  1. 单例类(Singleton): 单例类是单例模式的 核心,它包含一个私有的构造方法、一个私有的静态实例变量和一个公共的静态访问方法。单例类负责创建并提供访问单例实例的唯一途径。

  2. 静态实例变量(Instance): 单例类中通常包含一个私有的静态实例变量,用于保存单例实例。该变量被声明为私有的,以保证只有单例类内部可以访问和修改它。

  3. 公共的静态访问方法(getInstance): 单例类通过公共的静态访问方法提供对单例实例的全局访问。该方法通常被命名为 getInstance(),在方法内部实现懒加载或饿加载实例的创建,并返回单例实例。

单例模式的结构示意图如下:
在这里插入图片描述
 

在这个结构中,单例模式的核心是单例类,它负责创建并提供访问单例实例的方法。通过静态实例变量,单例类确保只有一个实例存在,并通过静态访问方法使得外部代码可以获取该实例。


三、单例模式的类型

单例模式主要有以下两种类型:

  • 懒汉式:真正需要使用 对象时才会去创建该单例类对象。
  • 饿汉式:类加载 时已经创建好该单例对象,等待被程序调用。

四、单例模式的实现

1. 饿汉式

在饿汉式的单例模式中,实例在类加载时就被创建,因此不存在多线程安全问题。以下是两种常见的饿汉式单例模式的实现方式:

1.1 静态变量实现

核心方法:

public class Singleton {
   
    // 在类加载时就创建实例
    private static final Singleton instance = new Singleton();

    // 私有构造函数,防止外部实例化
    private Singleton() {
   
    }

    // 静态方法返回单例实例
    public static Singleton getInstance() {
   
      return instance;
    }
}

测试类:

public class Singleton {
   
    // 在类加载时就创建实例
    private static final Singleton instance = new Singleton();

    // 私有构造函数,防止外部实例化
    private Singleton() {
   
    }

    // 静态方法返回单例实例
    public static Singleton getInstance() {
   
      return instance;
    }
}

class SingletonTest {
   

  public static void main(String[] args) {
   

      //获取单例类的对象,因为对象私有,只能通过方法去获取
      Singleton instance1 = Singleton.getInstance();
      Singleton instance2 = Singleton.getInstance();

      //判断是否为同一个对象
      System.out.println("instance1和instance2的地址是否相同:" + instance1.equals(instance2));
   }

}

测试结果:
在这里插入图片描述


1.2 静态代码块实现

核心方法:

public class Singleton {
   
  
    // 声明实例变量
    private static final Singleton instance;

    // 使用静态代码块在类加载时初始化实例
    static {
   
      instance = new Singleton();
    }

    // 私有构造函数,防止外部实例化
    private Singleton() {
   
    }

    // 静态方法返回单例实例
    public static Singleton getInstance() {
   
      return instance;
    }
}

测试类:

public class Singleton {
   

    // 声明实例变量
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java技术一点通

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

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

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

打赏作者

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

抵扣说明:

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

余额充值