创建型模式之单例模式

Labview程序框架介绍 当掌握LabVIEW基础知识并达到,理解单个小型模块程序会相对轻松。而若想进一步探索大型程序,就必然需要了解程序框架相关内容。LabVIEW常用的程序架构包括等。在多年工作中,我接触过的众多高级工程师所开发的大型程序,基本都基于这些架构搭建。接下来,将为大家详细介绍这些框架。 阅读详情

目的

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

动机

对于一些类而言,保证单一实例是必须的。例如拍电影的导演只有一个,系统中只有一个文件系统等。
实现Singleton的方法,可以让类保存自己的唯一实例,这个类保证其他类无法创建自己的对象,并向其他类提供获取自己所保存的唯一实例的方法。

适用性

  • 当类只能有一个实例,而且客户端可以从一个中公开访问点访问它时。
  • 当这个唯一实例应该是通过子类化可拓展的,并且客户无需更改代码就能使用这个拓展实例。

参与者

Singleton

  1. 定义一个Instance,允许客户访问其唯一实例。
  2. 可能负责创建其唯一实例。

效果

  1. 对唯一实例的受控访问

  2. 允许对操作和表示精化

实现

  1. 保证唯一实例

  2. 创建Singleton的子类

代码实例

静态常量饿汉式

class Singleton{

    private final static Singleton instance=new Singleton();
	
	private Singleton(){
	
	}
	
	public static Singleton getInstance(){
		
		return instance;
		
	}
	
}

特点:内存浪费,但线程安全,可用

静态代码块饿汉式

class Singleton{

	private Singleton instance;
    static{
        instance=new Singleton();
    }
    
    private Singleton(){
    
    }
    public static Singleton getInstance(){
        return instance;
    }
}

特点:内存浪费,但线程安全,可用

懒汉式(原始版)

class Singleton{

    private static Singleton instance;

    private Singleton(){
    }
    
    public static Singleton getInstance(){

        if(instance==null){
            //此处不安全
            instance = new Singleton();
        }
        return instance;
    }
}

特点:线程不安全,多线程不能使用

懒汉式(加锁)

class Singleton{

    private static Singleton instance;

    private Singleton(){

    }
    public static synchronized Singleton getInstance(){

        synchronized(Singleton.class){
            if(instance == null){
                instance=new Singleton();
            }
        }
        return instance;
    }
}

特点:线程安全,无法并行,效率过低,不推荐

懒汉式(双重检查)

class Singleton{
    private static volatile Singleton instance;

    private Singleton(){

    }
    public static Singleton getInstance(){

        if(instance == null){
            synchronized(Singleton.class){
                if(instance == null){
                    instance=new Singleton();
                }
            }
        }
        return instance;
    }
}

特点:线程安全,效率较高,懒汉式加载

静态内部类式

class Singleton{

    private Singleton(){
    }

    private static class SingletonInstance{
        private static final Singleton INSTANCE=new Singleton();
    }

    public static Singleton getInstance(){
        return SingletonInstance.INSTANCE;
    }
}

机理:静态内部类不随外部类加载而加载进内存。当静态内部类的静态变量和静态方法被调用时加载。(实现了懒汉式的效果)。

特点:线程安全,效率较高,懒汉式加载

枚举式

enum Singleton{
    INSTANCE;
    public void sayOK(){
        System.out.println("ok~");
    }
}
public class Main {
    public static void main(String[] args) {
        Singleton singleton = Singleton.INSTANCE;
        singleton.sayOK();
    }
}

机理:利用jvm保证线程安全和单例问题。
特点:简单,线程安全,防止反序列化重新创建对象(推荐)

《Java开发及前端最全面试题-Offer直通车》目录 Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。 阅读详情

相关推荐

unity游戏开发日志(一)将mmd模型导入unity,并解决材质丢失的问题

unity音乐游戏开发,导入角色模型并解决材质问题

yizhigou1的博客 1762

静态代码块及饿汉式单例模式

单例模式学的时候感觉比较抽象,到后面要用各种sdk了就好理解了,比如项目中只和一台redis服务器进行通讯,那么就按单例模式对sdk进行封装吧!

SHINIKAMI的博客 899

2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置

本次装置主要是对输入的正弦信号进行频率变换,并将原输入正弦信号作为 X 轴信号、变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。采用 EK-TM4C123GXL 板卡作为主控;频率变换采用“锁向环+计数器”实现 1-5 倍频的频率变换控制;李萨如图形采用两个 AD通道采集原输入的正弦信号作为 X 轴信号和频率变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。

qq_45890466的博客 7768

单例模式之饿汉式(静态常量)

单例模式: 一.饿汉式(静态常量) 构造器私有化(防止new) private SingleTon() {} 类的内部创建对象 private static SingleTon singleTon = new SingleTon(); 向外暴露一个静态的公共方法 public static SingleTon getInstance() { return singleTon; } 具体代码 /** * <h3>饿汉式(静态变量)</h3>

松松大魔王 538

从‘眼花缭乱’到‘心中有数’:rs-fMRI统计分析全流程避坑指南(附DPABI操作截图)

本文详细解析了rs-fMRI统计分析的全流程,从质量控制到统计模型选择,再到多重比较校正和结果解读。特别针对DPABI软件操作中的常见陷阱提供实用指南,帮助研究者避免FDR和GRF校正等关键环节的错误,实现从数据混乱到清晰分析的转变。

weixin_33686714的博客 398

NRF52832调试方法1——HardFault_Handler问题定位

一、遇到问题 keil debug模式下,直接点击全速运行(Run)发现程序卡死,点击stop按钮后,停到了HardFault_Handler位置,如下图所示。 此时使用navigate backwards(蓝色左箭头)是无效的,找不到程序卡在哪里。 二、解决办法 此时首先观察register窗口 若Stack为MSP,则复制R13(SP)的值到memory观察窗的地址搜索栏。每一行显示连续的28个地址上的存储信息,每个地址上存有一个字节。 从第21个位置起的连续四个字节是LR的值,

小梁的博客 3650

学习互联网架构第八课(单例和多线程)

单例模式,最常见的就是饥饿模式和懒汉模式,一个直接实例化对象,一个在调用方法时进行实例化对象。        大家见的最多的莫过于下面这种单例模式了,这种模式是懒汉模式,就是说只有你调用getInstance方法的时候,它才会创建实例。但是这种方式有个非常致命的问题就是在多线程的情况下不能正常工作。 public class Singleton { private static S

u012453843的专栏 1486

《YOLOv8实例分割实战:训练自己的数据集 》(视频课程)

本课程将手把手地教大家使用labelme标注和使用YOLOv8训练自己的数据集,完成一个多目标实例分割实战项目。

bai666ai的博客 790

为什么说单例模式的饿汉式是线程安全的?

类加载的方式是按需加载,且只加载一次。 因此,在上述单例类被加载时,就会实例化一个对象并交给自己的引用,供系统使用。 换句话说,在线程访问单例对象之前就已经创建好了。再加上,由于一个类在整个生命周期中只会被加载一次,因此该单例类只会创建一个实例。 也就是说,线程每次都只能也必定只可以拿到这个唯一的对象。因此就说,饿汉式单例天生就是线程安全的。 参考如下: 原文链接:https://blog.youkuaiyun.com/Ricky_Monarch/article/details/99407326 ...

jike11231的博客 1万+

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 160

CPA-7-资产减值

摘要:本文系统梳理了资产减值会计处理规范,涵盖六大要点:1)不同资产适用的减值准则(存货、长期资产、金融资产);2)减值测试触发条件与例外情形(商誉等需年度强制测试);3)存货可变现净值计算方法及特殊考量;4)可收回金额的双重判定标准(公允价值净额与现值孰高);5)资产组认定标准及减值分摊顺序(先商誉后按比例);6)含少数股东商誉的减值测试方法(需调整包含完全商誉的账面价值)。文中通过具体案例演示了合并报表中商誉减值的计算过程,强调比较基准应包含少数股东权益对应的商誉价值。

qq_34047402的博客 203

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

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

小工匠 3万+

sap资产post记录查询时候 报错 如图

SAP资产过账查询报错AA653解决方案摘要 错误原因:系统无法计算会计年度期间的最后一天,导致资产折旧/过账失败。常见原因包括:1)未创建2025年期间版本;2)期间日期映射不完整;3)依赖日历但未生成2025年日历。 解决方法: 通过OB37维护2025年12/13个完整期间 补充缺失期间或修正结束日期 使用SCAL生成2025年工厂日历 验证步骤: 检查T009R表2025年记录完整性 测试AFAB折旧运行 重新查询资产过账 提示:建议财务团队统一维护跨年度期间数据,并在测试系统验证变更。

金牌架构师 834

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

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

lyfGeek的博客 403

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

qq_46658171的博客 894

IEM模型,地表粗糙度模拟

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

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

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

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

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

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

thebigdipperbdx的博客 330

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

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

babstyt的博客 972

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

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

小迷糊的守护神 307

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

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

LJianDong的博客 211

单例模式(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

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

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

weixin_44050362的博客 789

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

设计模式:创建型模式--单例模式(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

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

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

智能多媒体 408
下一篇: MyShell
MoshMode
博客等级 码龄6年 4粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值