最简单的设计模式----单例模式,你懂了吗?

设计模式之单例模式(七种方法超详细) 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象,也就是说不能使用new关键字来创建对象。 阅读详情

1 饿汉模式

特点:类装载时就完成初始化,是比较简单而有效的单例模式
缺点:不一定会用到这个实例,浪费内存

public class Singleton01 {

    private static final Singleton01 INSTANCE01 =new Singleton01();

    private Singleton01(){}

    public static Singleton01 getInstance(){
        return INSTANCE01;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(()-> System.out.println(Singleton01.getInstance())).start();
        }
    }
}

2 懒汉模式

特点:类使用时才进行实例化
缺点:多线程下,存在线程安全问题

package singleton;

/**
 * @author yq
 */
public class Singleton02 {

    private static Singleton02 INSTANCE02;

    private Singleton02(){}

    public static Singleton02 getInstance() {
        if(INSTANCE02==null){
//            由于未加锁,多个线程都可以到达if内部,从而产生多个实例
//            模拟线程安全问题  sleep时间越长越容易看到效果          
//            try {
//                Thread.sleep(10);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
            INSTANCE02=new Singleton02();
        }
        return INSTANCE02;
    }

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(()-> System.out.println(Singleton02.getInstance().hashCode())).start();
        }
    }
}

3 双重校验锁

特点:双重校验保证大部分时间线程安全
缺点:不可以防止反序列化来获取多个实例

public class Singleton03 {
	//此处的volatile必须存在,否则会存在线程安全问题
    private static volatile Singleton03 INSTANCE03;

    private Singleton03(){}

    public static Singleton03 getInstance() {
    //A处:第一重判断,减少锁竞争
        if(INSTANCE03==null){
            synchronized (Singleton03.class){
            //B处:第二重判断,校验其他线程是否已经产生了实例,避免线程安全问题
                if(INSTANCE03==null){
                    INSTANCE03=new Singleton03();
                }
            }
        }
        return INSTANCE03;
    }

    public static void main(String[] args) {
        for (;;) {
            new Thread(()-> System.out.println(Singleton03.getInstance().hashCode())).start();
        }
    }
}

4 静态内部类

特点:比较完美的写法,但是对于需要传参的实例不友好,因为实例是在内部类创建的,外部传参很困难

public class Singleton04 {
    private Singleton04(){}
    
    private static class Holder{
        private final static Singleton04 INSTANCE =new Singleton04();
    }

    public static Singleton04 getInstance(){
        return Holder.INSTANCE;
    }
    
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(()-> System.out.println(Singleton04.getInstance().hashCode())).start();
        }
    }
}

5 枚举单例

特点:Effective Java 中推荐的单例写法,非常完美.可以保持单例,线程安全,还可以防止反序列化破解

public enum Singleton05 {
   
    INSTANCE;

    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(() -> System.out.println(INSTANCE.hashCode())).start();
        }
    }

}
从零开始学嵌入式之STM32——1.什么是STM32 它是ST公司推出的一系列单片机的统称。ST----指的是ST公司----意法半导体。意法半导体,成立于1987年,是由意大利的SGS微电子公司和法国的Thomson半导体公司合并而成。ARM目前主要是ARM架构处理器及外围组件的电路设计方案,知识产权授权的形式收取费用,其他公司根据ARM的方案设计出CPU产品。,它以应用为核心,软硬件可裁剪,旨在实现对设备的控制、监测或辅助功能,区别于通用计算机(如 PC、服务器)的 “一机多用” 属性。在嵌入式领域,目前主流的是cortex-M3内核推出的芯片。 阅读详情

相关推荐

Android13 CarPowerManagementService启动流程分析

在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。

liuning1985622的博客 957

Java设计模式之单例模式(附简单案例)

一、简单描述 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意看这里 单例类只能有一个实例。 单例类必须自己创建自己的唯一实例。 单例类必须给所有其他对象提供这一实例。 分类 单例模式就实例的创建时机来划分可分为:懒汉式与饿汉式两种。

程序猿爱篮球 6525

MS建模mmt

一、流程:1.定义好每个原子力场类型:Edit Sets(分组) 2.加H(一般是仅与Al-O八面体中的Al相连的O原子)、给H分组 3.“make P1”、校核化学式(正确与否) 4.扩成超晶胞(Na-mmt:4*1*1,Ca-mmt:4*2*1,illite:2*1*1,由化学式而定) 5.置换阳离子: mmt:模型中每 32 个 Si 4+有 1 个被 Al 3+ 取...

weixin_30721899的博客 2174

几种简单的设计模式

三、简单设计模式 1.装饰模式(包装模式) 装饰模式就是对某个类进行包装,目的是改写已存在的类的某个方法或某些方法,那么最有一个例子是改写jdbc链接池链接connection的关闭方法。在以前开发有手写链接池的,连接池获取连接,链接用完后应该放回到池中而不是关闭掉,如果按照原始的DriverManager.getConnection()得到的connection是MySQL驱动实现好的子类,因为connection本身是接口,只提供了标准方法,具体实现都是子类,那么close方法就是直接关闭掉,但我.

xiaobai1024的博客 907

Labview程序框架介绍

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

Misterlhw的博客 4623

手把手教你用HiNet实现图像隐藏:可逆神经网络实战指南(附代码)

本文提供了一份基于HiNet框架实现图像隐藏的实战指南。通过详细解析可逆神经网络原理,手把手指导环境搭建、模型构建、损失函数设计及训练流程,并附有完整代码。该方法利用单个可逆网络统一隐藏与恢复过程,结合小波变换提升隐蔽性,为信息隐藏应用提供了高效解决方案。

rgv234567的博客 434

最简单的设计模式是单例?

单例模式可以说是Java中最简单的设计模式,但同时也是技术面试中频率极高的面试题。因为它不仅涉及到设计模式,还包括了关于线程安全、内存模型、类加载等机制。所以说它是最简单的吗?

hello_1566的博客 1176

四足机器人机械结构设计:从腿型到驱动的全面解析

本文全面解析了四足机器人机械结构设计的核心要点。资深工程师老张深入探讨了并联腿与串联腿的选型策略、不同腿型布局对稳定性的影响,并详细对比了皮带轮与连杆驱动方式的优劣。文章结合实战经验,强调了足端设计、材料选择及整体结构轻量化等关键细节,为机器人开发者提供了从理论到实践的宝贵指导。

assembly8low的博客 634

单例模式的5种实现方式,最后一种最推荐

单例模式有多种实现方式,选择哪种方式取决于你的具体需求。如果你希望在程序启动时就创建实例,可以选择饿汉式;如果你希望在需要时才创建实例,可以选择懒汉式、静态内部类或枚举。在多线程环境下,需要注意线程安全问题。希望本文能帮助你更好地理解和使用单例模式。

QiuMing 4035

刚体转动欧拉方程:从理论到卫星姿态控制的实践

刚体转动欧拉方程是描述刚体旋转运动的基本动力学方程,在卫星姿态控制、机器人学、航空航天等领域有着广泛应用。本文将详细讲解欧拉方程的物理概念、数学推导、数值计算方法,并重点分析其在卫星姿态控制系统中的具体应用。

ScilogyHunter的博客 644

Cleo Synchronization接口任意文件读取漏洞CVE-2024-50623 附POC

微信公众号搜索:南风漏洞复现文库该文章 南风漏洞复现文库 公众号首发Cleo。

nnn2188185的博客 482

设计模式之单例模式

本文主要介绍了设计模式的相关内容,包括设计模式的概念、常见设计模式及 GoF 设计模式的分类。重点阐述了单例模式,从其核心思想、实现方式展开,如通过对比非单例的 `Student` 类实例化结果,引出单例模式。详细介绍了饿汉式、懒汉式(线程不安全)、线程安全的懒汉式、双重检查锁、静态内部类和枚举等多种单例模式的实现方式,以代码示例及测试展示特点,分析了各实现方式的优缺点,如直接在方法上加锁的线程安全懒汉式会因频繁加锁致并发性能差,以及对性能的优化目标,还提及单例模式的应用场景及优缺点,并在最后对单例模式进行

m0_73941339的博客 1767

ethernet eth0: Could not attach to PHY

整个流程看下来就是MAC connect PHY的过程失败了,失败的具体原因根据config_init,上图(bcm54xx_config_init) ,从此方向入手去定位原因;我这里的问题是has_gmac4没有置1,根据 has_gmac4: uses GMAC4 core.按照上面的调用逻辑,添加了部分打印,定位到__phy_read接口返回失败。stmmac_mdio_read 大部分都是linux的标准接口。最终取决于平台用的是哪家的phy,调用config_init。

无线互联&网络介绍 2704

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目

设计模式实战教程:基于 youngyangyang04/DesignPattern 开源项目 本教程旨在全面介绍位于 GitHub 的设计模式开源项目。通过深入浅出的讲解,我们将涵盖项目的核心要素,提供快速上手指南,展示经典应用场景,以及探索其在技术生态中的位置。 1. 项目介绍 设计模式 是软件开发中的一套成熟解决方案,用于解决常见的设计问题并促进代码的可重用性、可维护性和扩展性。此开源项目 D...

gitblog_00568的博客 1058

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

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

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

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

C++设计模式 - 单例模式

知识的学习在于点滴记录,坚持不懈;知识的学习要有深度和广度,不能只流于表面,坐井观天;知识要善于总结,不仅能够理解,更知道如何表达! 设计模式概念 设计模式简单来说就是在解决某一类问题场景时,有既定的,优秀的代码框架可以直接使用,与我们自己摸索出来的问题解决之道相比较,有以下优点可取: 代码更易于维护,代码的可读性,复用性,可移植性,健壮性会更好 当软件原有需求有变更或者增加新的需求时,合理...

大秦坑王的专栏 4055

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目

设计模式实践教程 - 基于 micooz/DesignPattern 开源项目 项目介绍 该项目由 Github 用户 micooz 维护,是针对软件开发中常见设计模式的实现集合。它旨在提供一个学习和理解各种设计模式的实战平台,涵盖了从单例模式到观察者模式等二十多种经典设计模式。通过此仓库,开发者可以深入学习每种模式的概念、应用场景及其实现细节,助力提升代码质量和可维护性。 项目快速启动 环境要求...

gitblog_00751的博客 819

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

设计模式-单例模式

设计模式记录学习单例模式是java中最简单的设计模式之一,这种类型的设计模式属于创建类型的一种,它提供了创建对象的最佳方式。就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供了一个取得其对象实例的静态方法。例如Hibernate的sessionFactory 它充当数据存储源代理,并且负责创建Session对象.SessionFactory并不是轻量级,一般情况下,一个项目只需要一个SessionFactory,这时就会用到单例模式单例模式注意事项和细节说明。

qq_41217095的博客 1653

秒懂设计模式之单例模式(Singleton Pattern)

概述 单例模式可能是GOF 23种设计模式中最简单的一种了,用的也最多。模式本身没啥讲的,无奈为了专栏的完整性,强行说几句吧。 咱们就说说Java中单例模式的多种写法吧,再聊聊你喜欢哪一种,为什么? 类型 创建型(creational) 难度 1颗星 定义 某个类只有一个实例,且自行实例化并向整个系统提供此实例 你是不是觉的终于有一个可以看得懂的设计模式的定义拉?如果是这样,说明你本来对它就比较熟悉。 使用场景 当你希望整个系统运行期间某个类只有一个实例时候 UML 这里有一张图,看见了吗?图在你心中

ShuSheng007的程序人生 2904

JavaScript 设计模式 —— 单例模式

在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案 —— 设计模式 设计模式原则:“找出程序中变化的地方,并将变化封装起来”

weixin_46653793的博客 1236

Java设计模式——单例模式

介绍Java设计模式的八种单例模式

m0_62946761的博客 7270

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1885

深入解析设计模式之单例模式

单例模式的核心要义在于确保一个类在整个系统运行期间仅有一个实例,并且为系统提供一个全局的访问点来获取这个唯一实例。从数学与逻辑学的角度类比,就如同一个 “有且仅有一个元素的集合”。在 Java 的领域中,单例模式被定义为 “一个类有且仅有一个实例,并且自行实例化向整个系统提供”。这意味着,无论在系统的何处需要使用该类的实例,获取到的都是同一个对象,从而避免了资源的重复创建与浪费,保证了系统中特定资源或功能的唯一性和一致性。

weixin_45969711的博客 1390

单例模式:秒懂五种实现方式

单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。单例模式指的是一个类只能实例化一次,并提供全局访问点来访问该实例。在Java编程中,单例模式非常有用,因为它可以确保类只有一个实例,并且该实例可以被其他对象访问,而不需要再创建新的对象。在本文中,我们详细介绍了Java单例模式的设计原理、几种典型的实现方式以及优缺点分析。单例模式是一种非常实用且常用的设计模式,它可以帮助我们提高代码的可读性和可维护性,节省系统资源,提高性能。

qq_36756227的博客 1991

Java 设计模式 - 单例模式

Java 设计模式 - 单例模式 作者: 霍英俊 [huo920@live.com] 文章目录Java 设计模式 - 单例模式单例设计模式介绍单例设计模式八种方式饿汉式 - 静态常量饿汉式(静态常量)应用实例优缺点说明饿汉式 - 静态代码块饿汉式(静态代码块)应用实例优缺点说明懒汉式 - 线程不安全懒汉式线程不安全应用实例优缺点说明懒汉式 - 线程安全,同步方法懒汉式线程安全,同步方法应用实例优缺点说明懒汉式 - 线程安全,同步代码块懒汉式 线程安全,同步代码块应用实例优缺点说明懒汉式 - 双重检查 - 推

霍英俊 1737
上一篇: Springboot下Ehcache的基本使用:附带工具类,快来围观吧
下一篇: Springboot报错Required request part ‘file‘ is not present,说一点不一样的解决方法
一步一结
博客等级 码龄7年 50粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值