创建型-单例模式

单视图几何Vanish Point(消失点/灭点)计算方法——Robert_T_Collins(罗伯特·柯林斯)算法 阅读详情

目录

定义

解决了什么问题(应用场景)

如何实现

饿汉式

懒汉式

双重检测

静态内部类

枚举

单例模式存在什么问题

是否有其它替代方案

参考资料


定义

一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。

 

解决了什么问题(应用场景)

  • 从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。
  • 我们还可以使用单例解决资源访问冲突的问题。

 

如何实现

要实现一个单例,我们需要关注的点无外乎下面几个:

  • 构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;
  • 考虑对象创建时的线程安全问题;
  • 考虑是否支持延迟加载;
  • 考虑 getInstance() 性能是否高(是否加锁)。

 

饿汉式

在类加载的时候,instance 静态实例就已经创建并初始化好了。类加载是线程安全的 instance 自然也就是线程安全的。不过,这种实现方式不支持延迟加载。

public class IdGenerator {

  private AtomicLong id = new AtomicLong(0);

  private static final IdGenerator instance = new IdGenerator();

  private IdGenerator() {}

  public static IdGenerator getInstance() {

    return instance;

  }

  public long getId() {

    return id.incrementAndGet();

  }

}

懒汉式

支持延迟加载,不过并发度低

public class IdGenerator {

  private AtomicLong id = new AtomicLong(0);

  private static IdGenerator instance;

  private IdGenerator() {}

  public static synchronized IdGenerator getInstance() {// 加了一把粒度很大的锁,导致并发度低

    if (instance == null) {

      instance = new IdGenerator();

    }

    return instance;

  }

  public long getId() {

    return id.incrementAndGet();

  }

}

 

双重检测

支持延迟加载,并发度高

public class IdGenerator {

  private AtomicLong id = new AtomicLong(0);

  private static IdGenerator instance;

  private IdGenerator() {}

  public static IdGenerator getInstance() {

    if (instance == null) {

      synchronized(IdGenerator.class) { // 此处为类级别的锁

        if (instance == null) {

          instance = new IdGenerator();

        }

      }

    }

    return instance;

  }

 

  public long getId() {

    return id.incrementAndGet();

  }

}

静态内部类

实现简单,支持延迟加载

public class IdGenerator {

  private AtomicLong id = new AtomicLong(0);

  private IdGenerator() {}

 

  private static class SingletonHolder{

    private static final IdGenerator instance = new IdGenerator();// 是线程安全的

  }

   

  public static IdGenerator getInstance() {

    return SingletonHolder.instance;

  }

  

  public long getId() {

    return id.incrementAndGet();

  }

}

枚举

枚举个锤子

最简单的实现方式,基于枚举类型的单例实现。这种实现方式通过 Java 枚举类型本身的特性,保证了实例创建的线程安全性和实例的唯一性。

public enum IdGenerator {

  INSTANCE;

  private AtomicLong id = new AtomicLong(0);

  

  public long getId() {

    return id.incrementAndGet();

  }

}

 

单例模式存在什么问题

42讲,没看懂

是否有其它替代方案

使用工厂模式,使用依赖注入

参考资料

极客时间--设计模式之美--第41讲,42讲,43讲

从零到一:如何用YOLOv8和PyQt5打造你的第一个花卉识别桌面应用 本文详细介绍了如何使用YOLOv8和PyQt5从零开始构建一个花卉识别桌面应用。涵盖环境搭建、数据准备、模型训练、界面设计、模型集成与性能优化等全流程,帮助开发者快速掌握深度学习目标识别技术的实际应用。 阅读详情

相关推荐

基于资源预测的Agent弹性伸缩:在成本与响应延迟间寻找最佳平衡点

手动伸缩:完全由运维人员人工调整副本数或服务器数量,效率极低,现在基本只用于极小规模的业务。反应式伸缩:基于当前实时监控指标触发伸缩规则,比如CPU利用率超过70%就加2个副本,是目前应用最广泛的方案,典型代表是K8s HPA、KEDA。预测式伸缩:基于历史时序数据预测未来的负载,提前进行伸缩,解决反应式伸缩的滞后性问题,典型代表是AWS Predictive Scaling、阿里云预测式HPA。智能Agent伸缩。

SuperAGI2025 135

单例模式的几种实现方式(JAVA)

单例模式的几种实现方式(JAVA) 概括起来,要实现一个单例,我们需要关注的点无外乎下面几个: 构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例; 考虑对象创建时的线程安全问题;考虑是否支持延迟加载; 考虑 getInstance() 性能是否高(是否加锁)。 1、饿汉式 饿汉式的实现方式比较简单。在类加载的时候,instance 静态实例就已经创建并初始化好...

huchao_lingo的博客 1534

STM32F4_LCD显示汉字

LCD显示汉字和显示图片、数字、字符的原理是一样的,都是将汉字、图片、数字以及字符转换点阵,进而通过函数扫描点阵在LCD上显示;

light_2025的博客 1万+

设计模式 ~ 创建型模式 ~ 单例模式 ~ Singleton Pattern。

设计模式 ~ 创建型模式 ~ 单例模式 ~ Singleton Pattern。

lyfGeek的博客 403

Unity AR涂涂乐实战:用户上传图片秒变3D模型新皮肤(附完整代码)

本文详细介绍了如何在Unity AR应用中实现用户上传图片动态生成3D模型皮肤的功能,重点讲解了动态创建材质球的技术方案和性能优化策略。通过完整的代码示例,开发者可以学习到多源图片处理、移动端内存管理以及AR场景适配等核心技巧,快速打造高性能的儿童教育类AR应用。

weixin_31509753的博客 370

解锁机器人动态平衡算法:从原理到实践

机器人的动态平衡,是指机器人在运动过程中,面对各种复杂的动态变化和外界干扰,依然能够维持稳定状态,不发生倾倒或失去控制的能力。它就像是一位技艺精湛的舞者,在舞台上翩翩起舞时,无论做出多么复杂的动作,都能巧妙地调整身体姿态,始终保持平衡,展现出优美的舞姿。在实际应用中,机器人的动态平衡对于其稳定运行起着至关重要的作用。以双足机器人为例,当它行走在不平整的地面上时,地面的起伏会使机器人的重心不断发生变化。如果没有良好的动态平衡能力,机器人就很容易因为重心偏移而摔倒,无法完成行走任务。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 3839

创建型模式之单例模式(Singleton Pattern)

  单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。   单例模式的要点有三个:一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。单例模式是一种对象创建型模式。单例模式又名单件模式或单态模式。 单例模式的几种实现方式 1、懒汉式,线程不安全 这种方式是最基本的实现方式,这种实现最大的问题就...

衣人之衣者,怀人之忧;食人之食者,死人之事! 960

【OpenClaw从入门到精通】第37篇:教育“龙虾”进化论——从答疑助教到全流程智能教学系统(2026实测版)

2026年,教育AI已从被动答疑的L1级进化至主动教学的L4级,清华开源的OpenMAIC平台更是打破传统慕课局限,实现互动式AI课堂。本文基于天津工业大学、西北农林科技大学等高校的真实应用案例,结合腾讯云、天翼云的实操指南,详解OpenClaw在教育场景的四层进化路径。核心内容包括:L1-L4级教育自动化架构解析、清华OpenMAIC L4级AI课堂深度拆解、从零搭建智能答疑(QQ群机器人)+作业批改+学情分析全流程系统,以及高校网络安全合规部署方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 812

创建型模式——单例模式(Singleton Pattern)

单例模式(Singleton Pattern)属于创建型模式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。类在内存中只能存在一个实例对象。

qq_46658171的博客 894

Android 13.0 SystemUI下拉状态栏背景增加高斯模糊背景

在13.0的产品开发中,发现现在很多产品都是高斯模糊背景的,这种高斯模糊背景看起来效果很不错,产品开发需要SystemUI下拉状态栏背景也是高斯模糊背景,所以就要来实现下拉状态栏高斯模糊背景

安卓兼职framework和app工程师的博客 2671

华为OD机试真题 新系统2026-04-01 C++ 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 384

创建型-单例模式(Singleton Pattern)

双重检查锁模式是一种非常好的单例实现模式,解决了单例、性能、线程安全问题,上面的双重检测锁模式看上去完美无缺,其实是存在问题,在多线程的情况下,可能会出现空指针问题,出现问题的原因是JVM在实例化对象的时候会进行优化和指令重排序操作。单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、session 工厂等)枚举类实现单例模式是唯一一种不会被破坏的单例实现模式。输出结果为false。

babstyt的博客 972

PCL 贪婪投影三角剖分算法【2025最新版】

本博客在学习PCL中的贪婪投影三角算法的基础上,实现了使用彩色点云重建彩色模型的应用案例。博客长期更新,最近一次更新时间为:2025年7月6日。

点云侠的博客 37万+

设计模式 - 创建型模式_ 单例模式 Singleton Pattern

单例模式常见的写法有: 懒汉式单例,饿汉式单例,登记式单例(可忽略)。单例模式特点: 单例类只能有一个实例 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提供这一对象实例 单例模式确保某各类只有一个实例,而且自行实例化并向整个系统提供这个实例。比如我们常见的线程池 、缓存等等。选择单例模式就是为了避免不一致的状态,避免政出多头。懒汉式单例 特点: - 懒汉式单例在第一次调用的时候

小工匠 3万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

单例模式(Singleton Pattern)【创建型】

C#设计模式之一单例模式(Singleton Pattern)【创建型】 原文:C#设计模式之一单例模式(Singleton Pattern)【创建型】 一、引言 看了李建忠老师的讲的设计模式已经有一段时间了(这段时间大概有一年多了),自己还没有写过自己的、有关设计模式的文章。这次想写一些关于设计模式的文章,用自己的理解和代码来写,算是复习一遍。写作的过程中也会多看看其他大...

LJianDong的博客 212

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

创建型模式--单例模式【Singleton Pattern】

单例模式定义 单例模式确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,且属于创建类模式。 Ensure that only one instance of a class is created. Provide a global point of access to the object. 单例模式类图 饿汉式单例 public...

thebigdipperbdx的博客 330

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

设计模式之创建型模式——单例模式(Singleton pattern)

创建型模式——单例模式(Singleton pattern) 定义 当你的项目需要某一个类的实例化对象只有一个的时候,可以使用单例模式。单例模式因为只创建一个实例化对象,所以使用上更便利,性能和空间都能得到优化,但缺点是因为实例化只有一个导致类与类之间耦合性增加,并且还需要考虑线程安全的问题。 示例 /** * 单例设计类 */ public class Singleton { pri...

小迷糊的守护神 307

创建型设计模式: 单例模式(Singleton Pattern)

设计模式;结构型模式;创建型设计模式;单例模式(Singleton Pattern)保证一个类仅有一个实例,并提供一个访问它的全局访问点。Singleton模式属于创建型模式,创建型模式包括FactoryMethod模式,AbstractFactory模式,Singleton模式,ProtoType模式和Builder模式。

智能多媒体 408

单例模式(Singleton Pattern) – 设计模式之创建型模式

单例模式(Singleton Pattern) – 设计模式之创建型模式: 目录 单例模式(Singleton Pattern) 类图 单例实现方式: 饿汉: 懒汉: 双重校验锁: 静态内部类:比较推荐 枚举:推荐的方式 分析 总结: 使用场景 单例模式(Singleton Pattern) 定义:Ensure a class has only one instance, and provide a global point of access to it. 确保一个类只有一.

一路向前 461

创建型模式 - 单例模式

创建型模式 - 单例模式

qq_43350524的博客 857

创建型 - 单例模式(Singleton pattern)

单例模式(Singleton Pattern):确保一个类有且只有一个实例,并提供一个全局访问点。

Lifelong learning 5681

创建型设计模式——单例模式

创建型设计模式,就是通过控制对象的创建方式来解决设计问题。

weixin_44050362的博客 791

03 创建型模式之单例模式(Singleton Pattern)

文章目录1 介绍1.1 单例模式结构1.2 单例模式的实现1.3 单例模式实现基本要求2 饿汉式2.1 静态变量方式2.2 静态代码块方式3 懒汉式3.1 方式1--线程不安全3.2 方式2--线程安全3.2 方式3--双重检查锁3.4 方式4(静态内部类方式)4 枚举方式实现5 破坏单例模式5.1 序列化方式破坏单例5.1.1 演示5.1.2 解决5.2 反射方式破坏单例5.2.2 解决 1 介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创

wyaoyao93的博客 278

【c++设计模式06】创建型4:单例模式(Singleton Pattern)

单例模式保证一个类只有一个实例,并且提供一个全局访问点来获取该实例。单例模式是一种创建型设计模式,用于确保一个类只有一个实例。它适用于需要控制资源共享访问权限的场景。单例模式可以分为懒汉式和饿汉式两种实现方式,并且需要注意线程安全性,可以使用互斥锁或双重检查锁定来保证线程安全。

junxuezheng的博客 1092

Singleton Pattern - 单例模式 - 创建型模式

参考: http://design-patterns.readthedocs.io/zh_CN/latest/creational_patterns/singleton.html#id18 http://www.runoob.com/design-pattern/singleton-pattern.html 模式动机: 对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多...

Lazyafei's Blog 272

设计模式:创建型模式--单例模式(Singleton Pattern)

设计模式:创建者模式——单例模式 文章目录设计模式:创建者模式——单例模式1. 概念2. 组成结构3. 实现方式3.1 饿汉式3.1.1 静态变量3.1.2 静态代码块3.1.3 枚举方式3.2 懒汉式3.2.1 非线程安全3.2.2 线程安全3.2.3 双重检查锁3.2.4 静态内部类4. 存在问题4.1 序列化反序列化4.2 反射机制 1. 概念 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种

ZZay's 649
上一篇: 自定义 Java ClassLoader
下一篇: 创建型-工厂模式
三易的博客
博客等级 码龄15年 42粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值