博客
关于我
设计模式之——单例模式(一)
阅读量:651 次
发布时间:2019-03-15

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

设计模式之——单例模式

单例模式的6种写法

在 面向对象 的程序设计中,单例模式是一种常用的设计模式. 它确保一个类在程序中只有一个实例,从而减少资源浪费,提高效率. 以下是单例模式的6种主要实现方式:

  • 饿汉模式
  • 饿汉模式的特点是在类加载的时候就进行实例化. 这种方式在类加载过程中就已经预先创建了实例,虽然在首次获取对象时反应稍慢,但一次获取对象的速度会更快. 优点是无需额外的线程同步,避免了多线程环境下的同步问题. 缺点是在内存占用较大的情况下可能会有浪费资源.

    1. 懒汉模式(线程不安全)
    2. 懒汉模式的特点是在第一次调用 getInstance() 方法时才进行实例化. 这样可以在第一次实际需要对象的时候才进行初始化,省去了不必要的资源消耗. 优点是资源利用率高. 缺点是在多线程环境下存在竞态条件,可能导致线程安全问题.

      1. 懒汉模式(线程安全)
      2. 为了解决多线程环境下的线程安全问题,懒汉模式可以使用线程同步机制. 通过在 getInstance() 方法外面加上 synchronized 关键字,可以保证单个线程在获取实例的同时,其他线程无法进行实例化操作. 这样可以保证单例对象的 thread-safety. 但是这种方式会导致每次获取单例对象都要进行同步,可能会影响性能.

        1. 双重检查模式(DCL)
        2. 双重检查模式结合了懒汉模式和线程安全机制. 它在 getInstance() 方法中使用两次 if 语句来检查单例对象是否存在. 第一次检查是在不带同步的代码块中进行的,进行了优化,避免了不必要的同步. 第二次检查是在同步的代码块中进行的,确保只有在单例对象不存在的情况下才会进行实例化. 这种方式在高并发环境下性能较好,资源利用率高. 不过,由于 volatile 关键字的使用可能会带来一些性能上的开销.

          1. 静态内部类单例模式
          2. 这种模式通过使用静态内部类来存储单例对象. 在第一次调用 getInstance() 方法时,外部类的加载机制会初始化静态内部类,并且只会初始化一次单例对象. 这样可以避免在高并发环境下的同步问题,同时确保单例对象的唯一性. 该模式的优点是既保证了懒 loading 的特性,又确保了 thread-safety.

            1. 枚举单例
            2. 枚举单例是一种非常简洁的实现方式. 通过在枚举类中定义一个唯一的单例 constant,确保了类内只有一个实例. 这种方式可以避免多线程同步的问题,同时还可以避免一些资源浪费. 但这种方式只能适用于枚举类型的单例对象.

              单例模式的使用场景

              单例模式的使用场景非常广泛,主要包括以下情况:

              • 所有项目都需要一个共享访问点或共享数据的场景
              • 需要在创建对象时消耗大量资源(如 I/O、数据库等)的场景
              • 工具类对象的创建场景

    转载地址:http://gwvmz.baihongyu.com/

    你可能感兴趣的文章
    JAVA 数据流练习之 统计文本中出现的字的次数
    查看>>
    JAVA后端编写的一些思路
    查看>>
    kuangbin带你飞 KMP & 扩展KMP & Manacher总结(一)
    查看>>
    PhotoshopCC2019制作表情包
    查看>>
    超好用的原生 JS + Canvas 进行图片压缩
    查看>>
    node 环境使用七牛云完成文件的上传下载与管理
    查看>>
    Android简单MVP解析接口列表,搜索框,点击切换
    查看>>
    ADB
    查看>>
    响应的HTTP协议格式+常见的响应码
    查看>>
    Java数组
    查看>>
    创建线程方式
    查看>>
    线程池
    查看>>
    Netty读写方法
    查看>>
    LRUCache
    查看>>
    Mac上如何强制关闭应用
    查看>>
    关于Linux系统中touch命令的说明
    查看>>
    剑指Offer03-数组中重复的数字
    查看>>
    将windows里的内容直接复制粘贴到ubuntu,提高效率
    查看>>
    将tomcat设置成window自启动服务
    查看>>
    17蓝桥试题之承压计算
    查看>>