当前位置: 首页 > article >正文

单例设计模式(Singleton Pattern)

在软件开发中,单例设计模式是一种非常常见的设计模式。它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在需要控制全局访问的情况下,例如配置管理、日志记录和资源池等场景中,单例模式显得尤为重要。

什么是单例模式

单例模式的核心思想是将类的构造函数私有化,从而禁止外部创建该类的实例。通过提供一个静态方法,用户可以获取类的唯一实例。这样,类的实例在整个应用程序的生命周期内始终保持唯一性。

单例模式的角色

  • Singleton: 负责创建和管理自己的唯一实例,并提供全局访问方法。

单例模式的实现

在Java中,有多种方式可以实现单例模式。以下是几种常见的方法:

1. 饿汉式单例

在类加载时就创建实例,线程安全,适合资源开销较小的场景。

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

2. 懒汉式单例

在需要时创建实例,线程不安全。通过加锁使其线程安全。

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

3. 枚举单例

使用枚举实现单例,天然线程安全,且防止反序列化。

public enum Singleton {
    INSTANCE;
    
    public void someMethod() {
        // 方法实现
    }
}

单例模式的应用场景

  1. 配置管理: 应用程序通常需要读取配置文件,单例模式确保只有一个配置管理实例。
  2. 日志管理: 日志管理器通常是单例的,以避免多线程环境下的冲突。
  3. 资源池: 线程池或数据库连接池等资源管理类通常使用单例模式,以控制资源的访问。

Spring框架中的单例模式

在Spring框架中,所有使用@Component@Service@Repository等注解声明的Bean默认都是单例的。Spring容器在启动时会创建这些Bean的唯一实例,并在后续请求中提供相同的实例。

示例代码

import org.springframework.stereotype.Service;

@Service
public class ConfigurationManager {
    private String configValue;

    public ConfigurationManager() {
        // 初始化配置
        this.configValue = "default value";
    }

    public String getConfigValue() {
        return configValue;
    }
}

@RestController
public class AppController {
    private final ConfigurationManager configurationManager;

    public AppController(ConfigurationManager configurationManager) {
        this.configurationManager = configurationManager;
    }

    @GetMapping("/config")
    public String getConfig() {
        return configurationManager.getConfigValue();
    }
}

结论

单例设计模式是一个简单而有效的解决方案,适用于需要限制实例数量的场景。在Java中实现单例模式有多种方式,但最重要的是根据具体的应用场景选择合适的实现方式。在Spring框架中,单例模式的实现已被内置,简化了开发者的工作。

如果您在开发中使用了单例模式,或者有其他的实现思路,欢迎在评论区分享!


http://www.kler.cn/news/359116.html

相关文章:

  • 数据分析-33-我国各地区近年来结婚离婚情况分析
  • Codeforces Round 979 (Div. 2) A-C 题解
  • 【Qt】详细Qt基础 (包括自定义控件)
  • 说说ConcurrentLinkedQueue的HOPS(延迟更新的策略)的设计?
  • 第二十六:TCP/IP的知识回顾
  • SpringCloudStream使用StreamBridge实现延时队列
  • 【C++打怪之路Lv9】-- vector
  • CMake变量:CMAKE_FIND_LIBRARY_SUFFIXES
  • 开关柜触头中的无线测温
  • DORA 机器人中间件学习教程(5)——3D激光雷达数据可视化
  • ATTCK 框架讲解
  • 线性代数 向量
  • 行业标准丨《变电站智能巡检导则:图像识别》(征求意见稿)
  • Scrapy | 使用Scrapy进行数据建模和请求
  • 在日本生活压力大吗?
  • 手动把idea里面的services项目删除了,如何恢复
  • cefsharp79.1.360(Chromium 79.0.3945.130)支持H264视频播放-PDF预览 老版本回顾系列体验
  • 基于vue框架的的宠物救助系统l07q0(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Node-RED开源项目的modbus通信(TCP)
  • scrapy 爬虫学习之【中医方剂】爬虫