7.Java设计模式-创建型模式-单例模式-枚举

创建型设计模式——单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。单例模式也比较好理解,比如一个人一生当中只能有一个真实的身份证号,一个国家只有一个政府,类似的场景都是属于单例模式。单例设计模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。 阅读详情


1.枚举

枚举:用于存放常量

用枚举的方式实现单例很简单,我们直接往下看...

2.代码实现

public enum Singleton {
    INSTANCE;

    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

就是这么简单,将单例INSTANCE定义为枚举常量,同时单例INSTANCE可以拥有自定义的一些属性(这样这个枚举常量就跟我们用到的对象相差无几了,都能拥有属性,且都可以对属性进行操作),例如上面代码中的name属性


3.代码测试

public class TestDemo {
    public static void main(String[] args) {
        Singleton s1 = Singleton.INSTANCE;
        Singleton s2 = Singleton.INSTANCE;
        System.out.println("s1 == s2: " + (s1 == s2)); // s1 == s2: true

        s1.setName("张三");
        System.out.println("s1 name: " + s1.getName()); // s1 name: 张三
        System.out.println("s2 name: " + s2.getName()); // s2 name: 张三
    }
}

在这,可以看到,s1和s2相等,符合单例的特性,同时可以设置name属性


4.总结

  • 优点
    • 实现简单
    • 线程安全
    • 支持高并发
    • 用枚举实现单例能天然防止反射和反序列化对单例的破坏,所以推荐使用枚举实现单例(后续两章将讲解反射和反序列化对单例的破坏)
  • 缺点
    • 不支持延迟加载

下一篇:8.Java设计模式-创建型模式-单例模式-反射对单例的破坏

【一线大厂Java面试题合集】第76篇-创建型设计模式精讲 模式核心考点单例模式7种写法、DCL+volatile原理、枚举最安全的原因工厂方法单产品创建、子类决定实例化抽象工厂产品族创建、与工厂方法的区别建造者模式多参数复杂对象、链式调用、与工厂模式区别原型模式深浅拷贝区别、序列化实现深拷贝掌握每种模式的代码写法、应用场景、框架实例,面试中能够信手拈来,是拿高分的关键。 阅读详情

相关推荐

什么是PCIe Relaxed Ordering

什么是PCIe上的Relaxed Ordering呢?直接翻译的话就是宽松排序。在理解这个东西之前,需要先了解下什么是PCIe的基本事务排序法则。

qq_42824983的博客 1512

java枚举(Enum)简述,多例模式的”语法糖“

枚举,其实就是单例设计模式的一种拓展“多例设计模式”,枚举可以自己定义,也可以使用java给出的语法。枚举在很多的地方都有应用,比如: switch;季节:季节:春、夏、秋、东;月份:1月、2月....、12月;线程状态:新建状态、 运行状态、阻塞状态、等待状态、超时等待状态、终止;等。 当程序中有一些固定类型固定数量的值时,使用枚举可以让代码更简洁、易读、更具有可维护性。 (按视频流程总结的。。。慢慢看吧)加finial设置为无法被修改。 在jdk1.5之前,对于多例设计模式

Elleat的博客 764

【RK3588开发记录】超详细的RK3588修改debug串口波特率为115200

修改RK3588的debug串口为115200

Crazydrams的博客 4805

java枚举、注解、代理设计模式

使用构造函数:枚举类型可以有自己的构造函数,可以为每个枚举常量定义不同的属性。实现接口:枚举类型可以实现一个或多个接口,可以为每个枚举常量提供不同的实现。枚举字段:枚举类型可以定义字段,可以根据需要为每个枚举常量定义不同的值。覆盖方法:枚举类型可以覆盖父类的方法,可以为每个枚举常量定义不同的行为。控制访问:代理对象可以控制对实际对象的访问,可以限制对实际对象的操作。代理对象:实现了接口,包含了实际对象的引用,可以控制对实际对象的访问。枚举方法:枚举类型可以定义方法,可以为每个枚举常量定义不同的行为。

互联网知识分享 322

Halcon 简单的形状匹配定位与区域跟随

【代码】Halcon简单的形状匹配定位与区域跟随。

唐大狗 2806

Python CalmAn(Calcium Imaging Analysis)神经生物学工具包安装及环境配置过程

CalmAn是一个用于大规模钙成像数据分析和行为分析的Python工具箱。CaImAn实施了大规模钙成像数据分析管道中所需的一套基本方法。针对多天的运动校正、源提取、尖峰反褶积和分量配准,实现了快速且可扩展的算法。它适用于双光子和单光子荧光显微镜数据,可以在批处理和在线模式下运行;CaImAn还包含一些分析摄像机行为的例程。

Fine的优快云博客 3558

java 枚举 设计模式_Java设计模式之使用枚举类的方式创建单例

package com.sinosoft.test;/*** 通过枚举类型来创建单例*/public enum EnumSingleton {INSTANCE;public void print(){System.out.println("============="+this.hashCode());}}创建测试类:package com.sinosoft.test;/*** 进行枚举类创建单...

weixin_31264565的博客 178

UG476 GT Transceivers文档翻译和自身理解

对UG476 Xilinx官方文档进行翻译的基础上加上自己的理解

weixin_45143788的博客 4600

Java之枚举和设计模式

一. 枚举类 (1)语法 public enum 枚举类名{      } (2)适用场景: 当对象的个数已经固定,并有限时,例如:性别,星期等等() 举例: //定义一个枚举类 public enum Sex { //男性 MALE, //女性 FEMALE } (3)枚举类中常用的方法 //枚举类中常用的方法 //1...

xing_ran_ran的博客 589

手把手教你用RSoft BPM仿真一个1x2光分束器:从参数设置到结果分析全记录

本文详细介绍了使用RSoft BPM模块设计和仿真1×2光分束器的完整流程,包括参数设置、结构建模、仿真配置和结果分析。通过实战指南,帮助读者掌握光波导器件的仿真技术,实现50:50功率分配的设计目标,适用于光通信和集成光学领域的研究与应用。

weixin_30545945的博客 545

基于CH32X035的USB双K型热电偶温度计:硬件设计、冷端补偿与信号放大详解

本文详细介绍了基于CH32X035单片机设计USB双K型热电偶温度计的完整方案。重点解析了硬件设计中的核心挑战:如何利用精密运放GS8552-SR进行信号放大,以及采用NTC热敏电阻和查表法实现精确的冷端补偿。项目通过USB供电通信,实现了双路高精度温度测量与显示,为电子爱好者和工程师提供了实用的参考设计。

weixin_42153793的博客 162

Java --- 枚举类

一、枚举类的介绍 1.枚举类的理解:类的对象只要是有限个,确定的。我们称此类为枚举类 2.当需要定义一组常量是时,强烈建议使用枚举类 3.如果枚举类中只要一个对象,则可以作为单例模式的实现方式。 二、如何定义枚举类 方式一、jdk5.0之前,自定义枚举类 方式二、jdk5.0,可以使用enum关键字定义枚举类 方式一: //自定义枚举类 若只有一个对象,可看成单例模式 class Seas...

执笔诉情殇的博客 264

32、运算放大器的工作原理与应用

本文详细介绍了运算放大器的工作原理与多种应用场景,涵盖开环与闭环放大器的基本概念、理想运算放大器的特性及其‘黄金规则’。文章深入解析了反相放大器、同相放大器、单位增益跟随器与反相器的配置和增益计算,并探讨了电压比较器及窗口比较器的工作机制。同时提供了运算放大器在实际应用中的选型流程、使用注意事项以及常见故障排查方法,帮助读者全面掌握运算放大器的设计与应用要点。

u5v6w7的博客 164

Java 23种设计模式系列之——实战单例模式

设计模式的分类---实战单利模式 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。用一个图片来整体描述一下: 一、前言 5个创建型模式的最后一个

Java0258的博客 318

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

设计模式之单例模式

单例模式的几种实现方式

优秀的程序员不应该是CRUD 166

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java版的7种单例模式

前言 Java 中的单例模式是我们一直且经常使用的设计模式之一,大家都很熟悉,所以这篇文章仅仅做我自己记忆。 Java版七种单例模式写法 一:懒汉,线程不安全 这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。 public class Singleton{ private static Singleton instance; private Singl...

stven_king的专栏 1万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【设计模式精讲】创建型模式之单例模式(饿汉式、懒汉式、双重校验、静态内部类、枚举)

1 ) 定义单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。单例模式也比较好理解,比如一个人一生当中只能有一个真实的身份证号,一个国家只有一个政府,类似的场景都是属于单例模式。2 ) 使用单例模式要做的两件事保证一个类只有一个实例为该实例提供一个全局访问节点3 ) 单例模式结构1 ) 单例的定义单例设计模式保证某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。

专注上位机开发、机器视觉、机器学习、嵌入式软硬件开发 1万+

JAVA设计模式——单例模式八种方式

目录 单例模式简介: 应用场景: 单例设计模式的八种方式: 1、饿汉式(静态常量) 2、饿汉式(静态代码块) 3、懒汉式(线程不安全) 4、懒汉式(线程安全,同步方法) 5、懒汉式(线程安全,同步代码块) 6、双重检查(推荐使用) 7、静态内部类(推荐使用) 8、枚举(推荐使用) 单例模式在JDK应用的源码分析 单例模式注意事项和细节说明 单例模式简介: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供

龍弟-idea的博客 7110

Java设计模式——单例模式

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

m0_62946761的博客 7270

设计模式 - 创建型模式_7种单例模式实现

创建型模式结构型模式⾏为模式⼯⼚⽅法模式抽象⼯⼚模式建造者模式原型模式除此之外还有最后⼀个 单例模式单例模式可以说是整个设计中最简单的模式之⼀,在编程开发中经常会遇到这样⼀种场景,那就是需要保证⼀个类只有⼀个实例哪怕多线程同时访问,并需要提供⼀个全局访问此实例的点。单例模式主要解决的是,⼀个全局使⽤的类频繁的创建和消费,从⽽提升提升整体的代码的性能。

小工匠 2万+

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

设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。

qq_40249026的博客 1179

JAVA设计模式——创建型模式

JAVA设计模式——创建型模式

这里有一只小马吖 1691

重学 Java 设计模式:实战单例模式「7种单例模式案例,Effective Java 作者推荐枚举单例模式」

作者:小傅哥 博客:https://bugstack.cn 沉淀、分享、成长,让自己和他人都能有所收获!???? 一、前言 5个创建型模式的最后一个 在设计模式中按照不同的处理方式共包含三大类;创建型模式、结构型模式和行为模式,其中创建型模式目前已经介绍了其中的四个;工厂方法模式、抽象工厂模式、生成器模式和原型模式,除此之外还有最后一个单例模式。 掌握了的知识才是自己的 在本次编写的重学 Java 设计模式的编写中尽可能多的用各种场景案例还介绍设计的使用,包括我们已经使用过的场景;各种类型奖品发放、多套

bugstack虫洞栈 3185

设计模式-单例模式

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

qq_41217095的博客 1653

设计模式之单列模式(7种单例模式案例,Effective Java 作者推荐枚举单例模式)

B:使用CAS的好处就是不需要使用传统的加锁方式保证线程安全,而是依赖于CAS的忙等算法,依赖于底层硬件的实现,来保证线程安全。相对于其他锁的实现没有线程的切换和阻塞也就没有了额外的开销,并且可以支持较大的并发性。目前此种方式的单例确实满足了懒加载,但是如果有多个访问者同时去获取对象实例你可以想象成一堆人在抢厕所,就会造成多个同样的实例并存,从而没有达到单例的要求。以上这种方式在我们平常的业务开发中非常常见,这样静态类的方式可以在第一次运行的时候直接初始化Map类,同时这里我们也不需要到延迟加载再使用。

优快云_LiMingfly的博客 1452
上一篇: 6.Java设计模式-创建型模式-单例模式-静态内部类
下一篇: 8.Java设计模式-创建型模式-单例模式-反射对单例的破坏
Bigger K
博客等级 码龄7年 172粉丝 13原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值