Java单例模式:唯一实例的精妙设计

2024-01-07 18:31:22

Java单例模式:唯一实例的精妙设计

前言:

欢迎来到本篇博客,今天我们将深入研究 Java 中一种经典的设计模式——单例模式。单例模式确保一个类只有一个实例,并提供一个全局访问点,使得该实例可以被全局范围内的代码访问。

1. 什么是单例模式?

单例模式是一种创建型设计模式,它保证一个类仅有一个实例,并提供一个全局访问点。这样的设计旨在节省系统资源,确保某个特定类只有一个实例存在。

2. 单例模式的实现方式:

  • 懒汉式: 在首次使用时创建实例。
  • 饿汉式: 类加载时就创建实例。
  • 双重检查锁: 结合懒汉式和饿汉式的优点。
  • 静态内部类: 利用类加载机制保证线程安全。
  • 枚举: 简洁、线程安全,是实现单例的最佳方式之一。

3. 懒汉式单例模式:

public class LazySingleton {

    private static LazySingleton instance;

    private LazySingleton() {
        // 私有构造方法
    }

    public static synchronized LazySingleton getInstance() {
        if (instance == null) {
            instance = new LazySingleton();
        }
        return instance;
    }
}

4. 饿汉式单例模式:

public class EagerSingleton {

    private static final EagerSingleton instance = new EagerSingleton();

    private EagerSingleton() {
        // 私有构造方法
    }

    public static EagerSingleton getInstance() {
        return instance;
    }
}

5. 双重检查锁单例模式:

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

6. 静态内部类单例模式:

public class InnerClassSingleton {

    private InnerClassSingleton() {
        // 私有构造方法
    }

    private static class SingletonHolder {
        private static final InnerClassSingleton instance = new InnerClassSingleton();
    }

    public static InnerClassSingleton getInstance() {
        return SingletonHolder.instance;
    }
}

7. 枚举单例模式:

public enum EnumSingleton {

    INSTANCE;

    // 可以添加其他方法和属性
}

8. 单例模式的应用场景:

  • 资源共享: 例如数据库连接池、线程池等。
  • 配置管理: 保持全局的配置信息。
  • 日志管理: 保持唯一的日志实例。

9. 实际案例:

public class SingletonExample {

    public static void main(String[] args) {
        LazySingleton lazyInstance = LazySingleton.getInstance();
        EagerSingleton eagerInstance = EagerSingleton.getInstance();
        DoubleCheckedSingleton doubleCheckedInstance = DoubleCheckedSingleton.getInstance();
        InnerClassSingleton innerClassInstance = InnerClassSingleton.getInstance();
        EnumSingleton enumInstance = EnumSingleton.INSTANCE;
        
        // 使用单例实例...
    }
}

在上述例子中,我们展示了五种不同的单例模式的实现方式,根据具体需求选择适合的实现方式。

结语:

通过本文的介绍,希望您对Java中的单例模式有了更深刻的了解。单例模式是一种经典的设计模式,在许多场景下都有着广泛的应用。感谢阅读,期待下次再访!

文章来源:https://blog.csdn.net/weixin_44976692/article/details/135413777
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。