Java 实现单例模式的七种写法

本文详细介绍了Java中单例模式的实现方式,包括饿汉式和懒汉式,以及它们各自的优缺点和线程安全性。重点讲解了双重检查锁和静态内部类这两种高效的线程安全单例模式,同时提到了枚举方式作为推荐的单例实现。

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

单例模式(Singleton Pattern) 是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场。

比如,某个服务器程序的配置信息存放在一个文件中,客户端通过一个 AppConfig 的类来读取配置文件的信息。如果在程序运行期间,有很多地方都需要使用配置文件的内容,也就是说,很多地方都需要创建 AppConfig 对象的实例,这就导致系统中存在多个 AppConfig 的实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多的情况下。

事实上,类似 AppConfig 这样的类,我们希望在程序运行期间只存在一个实例对象。

在 Java中,单例设计模式分类两种:

  • 饿汉式:类加载就会导致该单实例对象被创建
  • 懒汉式:类加载不会导致该单实例对象被创建,而是首次使用该对象时才会创建

在 Java中,我们可以用多种方法来实现单例模式:

1. 饿汉式-方式1(静态变量方式)

2. 饿汉式-方式2(静态代码块方式)

3. 懒汉式-方式1(线程不安全) 

4. 懒汉式-方式2(线程安全)

5. 懒汉式-方式3(双重检查锁)

6. 懒汉式-方式4(静态内部类方式)

7. 枚举方式

1. 饿汉式-方式1(静态变量方式)

/**
 * 饿汉式
 * 静态变量创建类的对象
 */
public class Singleton {
    // 私有构造方法
    private Singleton() {
    }

    // 在成员位置创建该类的对象
    private static Singleton instance = new Singleton();

    // 对外提供静态方法获取该对象
    public static Singleton getInstance() {
        return instance;
    }
}

说明:该方式在成员位置声明Singleton类型的静态变量,并创建Singleton类的对象instance。 instance对象是随着类的加载而创建的。如果该对象足够大的话,而一直没有使用就会造成内存 的浪费。

2. 饿汉式-方式2(静态代码块方式)

/**
 * 恶汉式
 * 在静态代码块中创建该类对象
 */
public class Singleton {
    // 私有构造方法
    private Singleton() {
    }

    // 在成员位置创建该类的对象
    private static Singleton instance;

    sta

低功耗蓝牙项目,需要一块懂省电的板

思澈 SF32LB52 芯片,BLE 协议栈深度优化,上手即开发

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大帅不是我

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

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

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

打赏作者

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

抵扣说明:

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

余额充值