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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!