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

设计模式:单例模式

文章目录

    • 1、概念
    • 2、实现方式
      • 1、懒汉式
      • 2、饿汉式
      • 3、双检锁/双重校验锁
      • 4、登记式/静态内部类
      • 5、枚举
      • 6、容器实现单例

1、概念

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

主要解决:一个全局使用的类频繁地创建与销毁。

何时使用:当您想控制实例数目,节省系统资源的时候。

如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。

关键代码:构造函数是私有的。

2、实现方式

1、懒汉式

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:易

描述:这种方式具备很好的 lazy loading,能够在多线程中很好的工作,但是,效率很低,99% 情况下不需要同步。
优点:第一次调用才初始化,避免内存浪费。
缺点:必须加锁 synchronized 才能保证单例,但加锁会影响效率。

在这里插入图片描述

2、饿汉式

是否 Lazy 初始化:否

是否多线程安全:是

实现难度:易

描述:这种方式比较常用,但容易产生垃圾对象。
优点:没有加锁,执行效率会提高。
缺点:类加载时就初始化,浪费内存。

在这里插入图片描述

3、双检锁/双重校验锁

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:较复杂

描述:这种方式采用双锁机制,安全且在多线程情况下能保持高性能。
在这里插入图片描述

4、登记式/静态内部类

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:一般

在这里插入图片描述

5、枚举

是否 Lazy 初始化:是

是否多线程安全:是

实现难度:易

描述:这种实现方式还没有被广泛采用,但这是实现单例模式的最佳方法。它更简洁,自动支持序列化机制,绝对防止多次实例化。

在这里插入图片描述

6、容器实现单例

是否 Lazy 初始化:否

是否多线程安全:是

实现难度:一般

在这里插入图片描述

http://www.lryc.cn/news/274775.html

相关文章:

  • 启动 Mac 时显示闪烁的问号
  • 十种编程语言的对比分析
  • React16源码: React.Children源码实现
  • 深度学习|4.1 深L层神经网络 4.2 深层网络的正向传播
  • 印象笔记03 衍生软件使用
  • R语言【CoordinateCleaner】——cc_gbif(): 根据通过 method 参数定义的方法,删除或标记地理空间中异常值的记录。
  • 模式识别与机器学习-集成学习
  • vue简单实现滚动条
  • 计算机网络第一课
  • 初识大数据,一文掌握大数据必备知识文集(12)
  • 安全防御之授权和访问控制技术
  • Iceberg从入门到精通系列之二十:Iceberg支持的字段类型
  • Unity坦克大战开发全流程——结束场景——通关界面
  • K8S三种发布方式和声明式资源管理
  • 从千问Agent看AI Agent——我们很强,但还有很长的路要走
  • Word2Vector介绍
  • 书生·浦语大模型全链路开源体系----(1)
  • 第四篇 行为型设计模式 - 灵活定义对象间交互
  • 2023最新租号平台系统源码支持单独租用或合租使用
  • 数据库的连接
  • 第14课 利用openCV快速数豆豆
  • 在前端利用Broadcast Channel实现浏览器跨 Tab 窗口通信的方法
  • 【Apache Doris】自定义函数之 JAVA UDF 详解
  • BMS电池管理系统带充放电控制过流过压保护
  • 在Linux中以后台静默运行Java应用程序
  • k8s---Pod的生命周期
  • CSS animation动画和关键帧实现轮播图效果HTML
  • Unity之键盘鼠标的监控
  • C# windows服务程序开机自启动exe程序
  • 【SpringMVC】常用注解