博客
关于我
23设计模式-单例模式(创建型模式)
阅读量:311 次
发布时间:2019-03-01

本文共 1104 字,大约阅读时间需要 3 分钟。

单例模式

单例模式是一种设计模式,旨在确保一个类在整个应用中只存在一个实例。这种模式通过控制实例化过程,防止多个对象的创建,节省内存资源并提高性能。单例模式的核心思想是确保类中只存在一个对象实例,并通过私有化构造方法和静态方法供外部获取。

单例模式的实现方式

单例模式有多种实现方式,常见的有以下几种:

1. 饿汉式(静态常量)

这种实现方式通过在类装载时就创建实例,并将实例存储在一个静态常量中。这种方式在类装载时就完成实例化,避免了线程同步问题,但在类转载时可能造成内存浪费。

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

与静态常量实现方式类似,但将实例化过程放在静态代码块中。这种方式在类装载时执行静态代码块,初始化实例。优缺点与静态常量方式相同。

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

这种方式通过检查实例是否为 null 来控制实例化。虽然在单线程情况下能够保证实例唯一性,但在多线程环境下可能导致线程安全问题,多个线程可能同时创建实例。

4. 懒汉式(线程安全)

为了解决线程不安全的问题,这种方式使用同步方法修饰实例化操作。虽然保证了线程安全,但由于同步方法的开销较大,可能导致程序效率低下。

5. 懒汉式(同步代码块,线程不安全)

这种方式尝试通过在实例化前加锁来解决线程不安全问题,但由于判断条件和实例化操作都没有加锁,仍然存在多个线程创建实例的风险。

6. 懒汉式(双重检查)

这种方式通过在双重 null 检查中加入锁,确保在多线程环境下也能正确创建实例。这种方式线程安全且效率较高。

7. 懒汉式(静态内部类)

这种方式利用静态内部类的特性,延迟实例化。静态内部类在外部类装载时不会立即加载,直到外部类需要访问方法时才进行实例化。这种方式避免了线程不安全并提高了效率。

8. 懒汉式(枚举类)

这种方式利用枚举类特性,确保单例模式的唯一性,同时避免了反序列化创建新实例的风险。

JDK中的单例模式应用

Java标准库中的 java.lang.Runtime 类使用单例模式,通过一个静态常量存储唯一的实例。这正是饿汉式(静态常量)实现方式的典型应用。

单例模式注意事项

  • 单例类的设计原则:确保类只允许有一个实例,通常通过私有化构造方法和静态获取方法实现。
  • 避免资源泄漏:确保在不需要时及时释放资源,避免内存泄漏。
  • 线程安全:确保在多线程环境下也能正确创建和获取实例。
  • 延迟加载:在第一次访问时进行实例化,减少资源占用。
  • 适用场景:适用于需要频繁创建和销毁的对象,尤其是资源占用较高的对象,如数据库连接池、文件处理工具类等。
  • 单例模式通过控制对象实例的数量,提升了系统性能和资源利用率,是一个非常有用的设计模式。

    你可能感兴趣的文章
    openCV目标识别 目标跟踪 YOLO5深度学习 Python 计算机视觉 计算机毕业设计 源码下载
    查看>>
    opencv笔记(1):图像缩放
    查看>>
    opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
    查看>>
    OpenCV计算点到直线的距离 数学法
    查看>>
    Opencv识别图中人脸
    查看>>
    OpenCV读写avi、mpeg文件
    查看>>
    opencv里用calcCovarMatrix计算协方差矩阵
    查看>>
    OpenCV错误:在setSize中断言失败(s&>;=0)-尝试将图像放置在网络摄像头提要上时
    查看>>
    opencv面向对象设计初探
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    OpenDaylight融合OpenStack架构分析
    查看>>
    OpenERP ORM 对象方法列表
    查看>>
    openEuler Summit 2022 成功举行,开启全场景创新新时代
    查看>>
    openEuler 正式开放:推动计算多样化时代的到来
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
    查看>>
    OpenFeign 入门与实战
    查看>>
    OpenFeign源码学习
    查看>>