单例模式

单例模式


目录
1 单例模式 1
1.1 单例模式的要点 1
1.2 单例模式的使用场景 1
1.3 单例模式的实现 1
1.3.1 饿汉式单例 1
1.3.2 懒汉式单列 2
1.3.3 单列模式的优缺点 2
1.3.4 登记式单列 2
1.4 单例模式应用---属性管理器 3
1.5 多例模式 3



1 单例模式
1.1 单例模式的要点
(1) 单例类只能有一个实例。
(2) 单例类必须自己创建自己的唯一的实例。
(3) 单例类必须给其他对象提供这一实例。

1.2 单例模式的使用场景
单例模式使用的必要条件就是一类只能有一个实例的场景,如系统的资源管理,回收站,打印机,数据库连接等。

1.3 单例模式的实现

1.3.1 饿汉式单例
public class SingletonEage {

/**
* static变量在类装载的时候就会进行初始化,且只初始化一次,整个类共享这个变量实例。
* final变量一旦初始化后就不能被改变。
* instance来存储单例实例。
*/
private static final SingletonEage instance = new SingletonEage();

/**
* 私有的构造方法,使得外部类不能创建该类的实例,可以在内部控制创建实例的数目
*/
private SingletonEage(){}

/**
* 提供外部类获取实例的方法,构造方法私有化,外部类不能构造该类的实例。
* static方法,可以通过类调用该方法返回该类的实例。
*/
public static SingletonEage getInstance(){
return instance;
}
}


1.3.2 懒汉式单列
public class SingletonLaze {

/**
* private变量,定义一个私有变量来存储创建的实例
* static变量在类装载的时候就会进行初始化,整个类共享这个变量实例。
*/
private static SingletonLaze instance = null;

/**
* 私有的构造方法,使得外部类不能创建该类的实例,可以在内部控制创建实例的数目
*/
private SingletonLaze(){}

/**
* synchronized 锁定该类的同步锁,实现线程安全
* static方法,可以通过类调用该方法返回该类的实例。
*/
synchronized public static SingletonLaze getInstance(){
//判断实例是否为null,为null则创建该类的实例。
if(instance == null){
instance = new SingletonLaze();
}
return instance;
}

}


1.3.3 单列模式的优缺点
饿汉式实现单例是以空间换时间,当饿汉式单例类在类装载的时候就会被创建类实例,不管你用不用先创建出来,然后每次要使用实例的时候在获取实例,不用像赖汉式那样使用的时候去判断实例是否存在,从而节约了时间。
懒汉式实现单例是以时间换空间,懒汉式不想饿汉式那样在类加载的时候创建类实例,而是等待要使用实例的时候在去判断实例是否存在,如果不存在则创建类实例,特别是使用同步锁方法,这样会降低方法的访问速度,使得每次使用实例都需要同步去判断类实例是否存在,这样,会花费很多时间。
双重检查加锁:可以使用双重检查加锁来提高懒汉式的性能。并不是每次调用获取类实例方法都需要同步,可以先不同步方法,进入方法后,先检查类实例是否存在,如果不存在才进入同步块,创建类实例,第一次检查的时候需要进入同步块,当再次进入获取类实例方法后,再次检查类实例是否存在,此时类实例已经存在则不需要在进入同步块。这样一来只需要同步一次,从而减少了多次同步浪费的时间。
/**
* static方法,可以通过类调用该方法返回该类的实例。
*/
public static SingletonLaze getInstance(){
//判断实例是否为null,为null则创建该类的实例。
if(instance == null){
//同步块,保证线程安全
synchronized (this) {
if(null == instance)
instance = new SingletonLaze();
}
return instance;
}
}


1.3.4 登记式单列
登记式单列利用Map缓存的思想来实现单列,在类加载的时候创建好一个类实例缓存到map中,同过该map可以获取该类实例。

package com.singleton;

import java.util.HashMap;

/**
* @author xmong
*
*/
public class SingletonReg {


private static HashMap instanceMap = new HashMap();

static{
SingletonReg instance = new SingletonReg();
instanceMap.put(instance.getClass().getName(), instance);
}

protected SingletonReg(){}


public static SingletonReg getInstance(String name){
if(name==null){
name="com.singleton.SingletonReg";
}
if(instanceMap.get(name)==null){
try {
instanceMap.put(name, Class.forName(name).newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
return (SingletonReg)instanceMap.get(name);
}

}


1.4 单例模式应用---属性管理器

1.5 多例模式


---------------------------------------------------

参考:
《java与模式》
《研磨设计》

未完待续
设计模式-单例模式-注册式单例模式-枚举式单例模式和容器式单例模式在Java中的使用示例 上面讲了单例模式的三种方式,另外还有一种注册式单例模式。 阅读详情

相关推荐

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.youkuaiyun.com/weixin_38218267/article/details/1

aizaiyueye的专栏 3448

单例模式的实现

当在应用程序中需要控制资源共享、进行配置管理和日志记录等操作时,一种常见的需求是希望通过一个全局访问点,让程序无论在哪个地方,只要能够访问到,就可以通过这个全局访问点,来获取相关实例信息。对于懒汉式单例模式,单例实例在第一次被使用时构建,延迟初始化,相对资源利用率高。如果学过Spring的小伙伴,应该清楚,Spring框架中,默认情况下管理的Bean是单例的,这也意味着Spring容器在创建和管理Bean时,每个Bean只会有一个实例,并且这个实例会被所有需要它的地方共享。:避免重复创建实例,节省资源。

Hardy Army的博客 1613

分享一下如何使用labelimg制作自己的YOLO数据集

首先准备一下自己的下准备一个空文件夹用于保存标签文件,如下图所示。

skywalkerxhx的博客 831

C++单例模式详解

C++ 单例模式详解,懒汉式单例,饿汉式单例

Marvek的博客 5329

单片机通信总述——理论部分(CAN、串口、SPI、I2C等)

并行通信:传输原理:数据各个位同时传输;优点:速度快; 缺点:占用引脚资源多。是指使用 8、16、32 及 64 根或更多的数据线(有多少信号为就需要多少信号位)进行传输的通讯方式,可以同一时刻传输多个数据位的数据。串行通信: 传输原理:数据按位顺序传输;优点:占用引脚资源少; 缺点:速度相对较慢。是指设备之间通过一根数据信号线,地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式,同一时刻只能传输一位(bit)数据。 单工: 数据传输只支持数据在一个方向上传输。信息只能单方向传输的工作方式,一

qq_42475191的博客 1万+

vue3接入大华摄像头

┃ ┃ ┣ 📜PlaybackModal.vue 回放列表模态框。┃ ┃ ┗ 📜VideoGrid.vue 视频播放区域。┃ ┃ ┣ 📜ControlPanel.vue 控制面板。┃ ┃ ┣ 📜DeviceList.vue 设备列表。┃ ┣ 📂module //大华摄像头文件。

💻 专注 Vue 前端与 Java 后端技术 🌱 目前正在深入 Spring Boot、微服务与性能优化 📝 定期分享实战踩坑经验与学习笔记 🤝 欢迎交流,共同进步 915

什么是单例模式?单例模式详解

个人印象笔记地址:https://app.yinxiang.com/fx/eaa22560-57a4-4554-8de8-b5f254090d37 单例模式介绍 1.1 模式说明 实现1个类只有1个实例化对象 & 提供一个全局访问点 1.2 作用(解决的问题) 保证1个类只有1个对象,降低对象之间的耦合度 1.3 工作原理 在Java中,我们通过使用对象(类实例化后)来操作这些类,类实例化是通过它的构造方法进行的,要是想实现一个类只有一个实例化对象,就要对类的构造方法做改变。 单

weixin_43373417的博客 2125

pytorch中的wheel文件

whl 文件是 Python 的一个软件包分发格式,用于在 Python 中安装软件包。它是 Python Wheel 的缩写,也被称为 wheel 文件。这种文件格式旨在简化 Python 软件包的安装和分发。对于 PyTorch 而言,它提供了预编译的 .whl 文件,您可以通过 pip 安装这些文件来快速方便地安装 PyTorch。这些 .whl 文件是已经编译好的二进制分发文件,可以直接安装在您的 Python 环境中,而无需再进行编译。

bj_zhb的博客 3127

单例模式笔记

单例模式 简述: 单例模式是一种常用的软件设计模式。这种模式属于创建型模式,在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例,该模式的类提供了一种访问其唯一的对象的方式。 饿汉式单例模式 简述:在类加载之前唯一实例对象已经创建完成 实现类: package com.wu.Singleton; public class SingletonDemo { private String name; private int age ; //

一夜星尘 9383

【即插即用模块】Transformer篇 | MICCAI 2025 | ReLULA:Q/K双ReLU线性注意力,既轻又准!

本文介绍了一种基于线性注意力的多实例学习模块(Lin-MIL),适用于高分辨率视觉任务。该模块通过转置计算顺序和使用ReLU激活,将计算复杂度从O(n²d)降至O(nd²),同时提升特征判别性。核心创新包括Q/K双ReLU激活、可学习温度系数和数值稳定归一化。实验表明,该模块在轻量化视觉任务中优于传统线性注意力和Mamba架构。代码实现了模块化矩阵乘法,支持即插即用替换ViT自注意力层。该模块特别适合计算病理学等需要处理大量图像补丁的任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 140

【人工智能 Open AI】程序员怎样提升研发效率?从技术、业务、项目管理等等多个方面来阐述。

程序员要想提升研发效率,需要从技术、业务、项目管理等多方面着手,多靠工具配合实践实现,从而提升研发效率。

AI天才研究院 5527

单例模式《单例模式概念、什么时候能用到单例模式、单例模式的好处》

坚持原创输出,点击蓝字关注我吧作者:清菡博客:oschina、云+社区、知乎等各大平台都有。目录一、单例模式的概念1.类每次实例化的时候都会创建一个新的对象,如果要求类只能被实例化一次该怎...

清菡的博客 1480

真题库系列之 CCF GESP 2025年12月认证 Python 1级真题含正确答案与解析

学生通过计算机基础知识的学习,了解计算机的构成与操作,以及计算机的发 展历程。通过编程基础知识以及语句的掌握,可以独立完成简单功能的顺序结构、 分支结构、循环结构的程序。

iCloudEnd的博客 319

单例模式以及反射对单例模式的破坏及防御

单例模式是 Java 中非常重要的设计模式,它确保了类只有一个实例,但由于 Java 的反射机制,饿汉式、懒汉式、双重校验锁和静态内部类实现的单例模式都可以被反射轻松破坏。通过在构造方法中添加实例校验机制,我们可以有效防止反射创建多个实例。饿汉式:即使不使用,也会提前加载单例,浪费内存。懒汉式:通过实现线程安全的懒加载,但并发性能较低。双重校验锁:提高了并发性能,使用volatile防止指令重排问题。静态内部类:相较于双重校验锁更加优雅,实现了懒加载和线程安全。

weixin_54574094的博客 1904

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

单例模式及破解单例模式

单例模式:一个类自己负责创建自己的对象,同时确保系统中该对象只会被创建一个! 特点: 在整个系统中只能有一个该类的实例(必须确保构造器私有,避免其他类new出该类的对象) 他必须自行创建这个实例(在代码对应的类中自己编写实例化逻辑) 它必须自行向整个系统提供这个实例(对外提供实例化方法,外面的类想要这个实例的对象随时可以调用) 单例模式的饿汉式 public class Person { private String name; private String age; //

weixin_49149614的博客 679

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java单例模式、Scala单例模式

单例java的两种单例模式Scala的单例模式 java的两种单例模式 /** * 单例 * * 一个类只能创建一个对象, * 定义的步骤: * 恶汉式: * 1、私有构造器 * 2、提供一个public的static的返回值为本类引用的方法 * 3、为了给第2步中提供实例,创建一个private的s...

Baiyabai的博客 1236

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

小谈单例模式 | 单例模式的八种写法?

看了这篇文章,你能和面试官畅谈单例模式一、前言二、单例模式最通俗的解释来一个简单的例子三、实现单例模式的8种写法1.饿汉式(静态常量)(可用)2.饿汉式(静态代码块)(可用)3.懒汉式(线程不安全)(不可用)4.懒汉式(线程安全)(不推荐)5.懒汉式(线程不安全)(不可用)6.懒汉式(双重检查)(推荐面试使用)7.懒汉(静态内部类方式)(可用)8.枚举 推荐在项目中使用四、常见面试问题五、关于几种...

qq_35764460的博客 1690

什么是单例模式

单例模式: 1.保证类在内存中只能有一个对象 单例模式分为: 1.懒汉式:类一加载就创建对象 2.饿汉式:用的时候,才去创建对象 相关经验: 饿汉式 (是不会出现问题的单例模式) 懒汉式 (可能会出现问题的单例模式) (1.)懒加载(延迟加载) (2.)线程安全问题 1.)是否多线程环境 是 2.)是否有共享数据 是 3.)是否有多条语句操作共享数据 是 举例: 1.饿汉模...

Good_Luck_Li的博客 7758

单例模式的应用

单例模式定义: 单例模式(Singlleton Pattern) 是指确保一个类在任何情况下都绝对只有一个实例,并提供一个全局访问点。 一、饿汉式 优点:执行效率高,性能高,没有任何的锁 缺点:某些情况下,可能会造成内存浪费 二、懒汉式 优点:节省了内存 缺点:线程不安全的问题 三、线程式 四、 ...

qq_43170213的博客 1981

单例模式及单例模式的应用

单例模式(Singleton),也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 ...

xpdbaba的博客 577

设计模式 —— 单例模式

单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下:确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

weixin_44814196的博客 1006

单例模式介绍

一、单例模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类 只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。

KEEP 602

单例模式、饿汉式单例模式、懒汉式单例模式

单例模式又叫做 Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。

学无止境 862
上一篇: java实现接口的bug
下一篇: spring mvc
xmong
博客等级 码龄19年 33粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值