设计模式: 单例模式 ④

一、思想

        单例模式主要是为了避免因为创建了多个实例造成资源的浪费,使用单例模式能够保证整个应用中有且只有一个实例。

        定义:只需要三步就可以保证对象的唯一性

                (1) 不允许其他程序用new对象
                (2) 在该类中创建对象
                (3) 对外提供一个可以让其他程序获取该对象的方法
        对比定义:

                (1) 私有化该类的构造函数
                (2) 通过new在本类中创建一个本类对象
                (3) 定义一个公有的方法,将在该类中所创建的对象返回

        例子:

            双重检验锁单例模式是一种线程安全的单例模式实现方式,
            它通过使用synchronized关键字来确保线程安全性。
            具体实现方式是在getInstance()方法中添加双重检验锁,这可以避免不必要的锁竞争和实例化。

public class Singleton {
    private static volatile Singleton instance;
    
    private Singleton() {
        // 私有构造函数
    }
    
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

二、应用场景

        单例模式通常在需要确保全局只有一个实例的场景中使用,例如:

  • 线程池:在多线程环境下,线程池需要保证只有一个实例。
  • 数据库连接池:同样地,数据库连接池也需要保证只有一个实例。
  • 日志对象:日志对象通常是全局可见的,因此需要保证只有一个实例。
  • 配置文件:在某些情况下,需要全局共享的配置文件也需要保证只有一个实例。

三、总结

        单例模式是一种非常常用的设计模式,在多线程环境下,它可以确保只有一个实例被创建,并提供一种全局访问这个实例的方式。在Java中,可以通过私有构造函数和静态方法实现单例模式。在实现单例模式时,需要注意线程安全性、序列化问题以及反射问题。尽管单例模式非常有用,但也有一些缺点,例如它可能导致代码变得更加复杂,而且在多线程环境下可能会影响性能。因此,在使用单例模式时需要根据具体情况进行权衡。

相关推荐

  1. 设计模式

    2024-03-10 06:28:03       63 阅读
  2. 设计模式

    2024-03-10 06:28:03       43 阅读
  3. 设计模式

    2024-03-10 06:28:03       40 阅读
  4. 设计模式

    2024-03-10 06:28:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 06:28:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 06:28:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 06:28:03       87 阅读
  4. Python语言-面向对象

    2024-03-10 06:28:03       96 阅读

热门阅读

  1. Python 利用string.Template完成字符串替换

    2024-03-10 06:28:03       46 阅读
  2. 支持向量机(SVM)算法基本原理&skearn实现

    2024-03-10 06:28:03       42 阅读
  3. 【LeetCode】2386. 找出数组的第 K 大和

    2024-03-10 06:28:03       44 阅读
  4. python绘制水果价格与利润表图1-3

    2024-03-10 06:28:03       42 阅读
  5. 网页的用户注册功能

    2024-03-10 06:28:03       48 阅读
  6. 【Spring高级】第3讲 Bean的生命周期

    2024-03-10 06:28:03       48 阅读
  7. 力扣382周赛

    2024-03-10 06:28:03       42 阅读
  8. 人机环境系统与媒体

    2024-03-10 06:28:03       44 阅读