单元素的枚举实现单例

微店构造订单页面,自动化抢票 之前的文章写过微店抢票如何构造订单页面分析,这篇文章在之前的基础上,进行抢票。 阅读详情

单元素的枚举类型已经成为实现Singleton的最佳方法。
–Joshua Bloch在Effective Java

在这种实现方式中,既可以避免多线程同步问题;还可以防止通过反射和反序列化来重新创建新的对象。


前言

使类成为Singleton会使它的客户端测试变得十分困难

因为不可能给Singleton替换模拟实现,除非实现一个充当其类型的接口。
推荐的方法是通过简单地使用一个元素创建一个枚举类型来实现单例:


提示:以下是本篇文章正文内容,下面案例可供参考

一、Effective Java 例子

// Enum singleton - the preferred approach
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}

二、怎么使用

1.代码如下(示例):

public enum Singleton52 {
    INSTANCE;
    
    private TestSheep instance;

    Singleton52() {
        instance = new TestSheep();
    }


    public TestSheep getInstance() {
        return instance;
    }

}

2. 测试

    public static void main(String[] args) {
            TestSheep instance1 = Singleton52.INSTANCE.getInstance();
            TestSheep instance2 = Singleton52.INSTANCE.getInstance();
            System.out.println(instance1==instance2);
    }

输出:true


注意:如果Singleton必须拓展一个超类,而不是扩展Enum的时候,则不宜使用这个方法(虽然可以声明枚举去实现接口)

华为od 面试八股文_操作系统_01_含答案 阅读详情

相关推荐

基于Hadoop的NBA篮球球员大数据分析与可视化系统大数据分析系统python的项目(源码+lw+部署文档+讲解等)

本系统以 Hadoop 为基础,致力于对 NBA 篮球球员的海量数据进行深入分析与可视化呈现。它能够收集来自多个数据源的丰富数据,包括球员比赛统计数据、身体素质数据、技术特点数据等。利用 Hadoop 的分布式存储和计算能力,对这些大规模数据进行高效处理。通过数据分析算法,挖掘球员的潜在价值和特点,如球员的得分能力趋势、篮板球效率变化、不同位置球员的技术差异等。同时,借助先进的可视化技术,将分析结果以直观的图表、图形等形式展示出来。教练和球队管理层可以通过可视化界面清晰地了解球员的综合表现和发展态势,从而制

QQ3359892174的博客 1314

浅谈使用单元素的枚举类型实现单例模式

简介 使用单元素的枚举实现单例模式简介通常情况下,我们写单例模式的时候无非就是三个步骤:构造器私有化,声明私有静态变量,提供静态获取实例的方法。简单说就是以下这种方式:class SingletonA { private static SingletonA instence = new SingletonA(); private SingletonA() { } pu

Huang兄 1万+

python -- 海洋气象科研论文中常用绘图配色汇总

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。可以通过自定义选取不同颜色的rgb,通过自定义的方式构建colormap。

weixin_68789096的博客 972

解析——为什么单元素的枚举类型是单例模式的最佳实现

关于单例模式,我们可以使用静态内部类、双重检测的实现方法来保证线程安全,那么该如何保证单例模式最核心的作用——“实现该模式的类有且只有一个实例对象”呢? 我们知道,创建一个对象的方式有:new、克隆、序列化、反射。 由于单例模式提供的是一个私有的构造函数,所以不能外部使用new的方式创建对象。 虽然clone()是Object的方法,也就是说每个对象都拥有一个克隆方法,但是某一个对象直接调用cl...

whgtheone的博客 4113

知识推理——TransE(知识表示、知识嵌入)

知识图谱嵌入/表示方法 TransE

missyoudaisy的博客 1831

5分钟搞懂语义通信:如何用深度学习让AI理解你的真实意图?

本文深入解析了语义通信如何利用深度学习技术,实现从传统‘比特保真’到‘语义保真’的范式转移。通过介绍基于神经网络的端到端系统架构、编解码技术及实战案例,阐明AI如何理解并高效传递信息核心意图,为6G时代的人机交互奠定基础。

weixin_29191669的博客 263

单例模式之枚举实现

如果你没有学过单例模式,请点击:确保对象的唯一性——单例模式。 有很多网友留言说我漏掉了一种非常重要的Java语言的单例模式实现方式——枚举。 这篇姗姗来迟的博文将弥补这个“巨大的”缺陷。 在Java语言中,如果综合考虑线程安全和延迟加载,IoDH(Initialization Demand Holder)无疑是一种比较好的实现方式【参见:确保对象的唯一性——单例模式 (四)】,它巧妙利用了Java静态内部类的特点。 但...

刘伟技术博客 3万+

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 205

【单例深思】枚举实现单例原理

单例的枚举实现在《Effective Java》中有提到,因为其功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,单元素的枚举类型被作者认为是实现Singleton的最佳方法。 其实现非常简单,如下: publicenumSingleton{ INSTANCE; privateSing...

weixin_30733003的博客 1290

Unity小游戏接入抖音敏感词检测

摘要: 本文介绍了Unity小游戏接入抖音敏感词检测的方法。抖音官方提供了两种API:SensitiveWordCheck用于检测敏感词,ReplaceSensitiveWords用于替换敏感词。此外,若使用键盘输入事件,可通过tt.onKeyboardComplete监听回调,平台会自动屏蔽敏感词(替换为*)。接入官方字库可有效避免审核驳回,适用于小游戏中的用户输入功能(如起名系统)。附官方文档链接及参数说明。

类人_猿的博客 4594

opencode : 无法将“opencode“项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

opencode命令识别问题与openclawcodexgemini确保的路径在 PATH 中。这个知识对所有 npm 全局工具通用。

一键难忘的博客 4521

Effective Java--枚举类型的

《effective java》里面已经承认单元素枚举类是实现单例模式最好的方法(从java1.5版本开始) 单元素枚举类型更加简洁、无偿的提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击时;它已经成为实现Singleton的最佳方法。

WUJIPAI的专栏 754

基于Matlab的轨迹分析行为识别

本文将介绍基于Matlab的轨迹分析行为识别方法,并提供相应的源代码。在轨迹特征提取完成后,我们需要通过对于某一时间窗口内的轨迹特征进行聚合和分析,得到相应的行为特征。轨迹分析作为一种简单有效的行为识别方法,在实际应用中得到了广泛的应用。本文介绍了一种基于Matlab的轨迹分析行为识别方法,并提供相应的源代码作为参考。轨迹分析是指对于一定时间内某个对象在空间中运动的路径进行跟踪和分析的方法。在行为识别中,我们可以通过对于轨迹进行特征提取和分析,进而得到该对象的运动模式和行为特征。二、轨迹分析行为识别流程。

DevProPlus的博客 885

使用单元素枚举实现单例

如果不涉及到线程安全及延迟加载,单例最简单的写法: public class SingletonTest { public static SingletonTest instance = new SingletonTest(); private SingletonTest(){ } } 考虑到线程安全跟延迟加载,修改如下: pu...

weixin_34106122的博客 138

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

单元素的枚举类型实现单例

/** * Created by kaizige on 2017/7/4. */ public enum Singleton { INSTANCE("yangkai"); private String name; Singleton(String name){ this.name = name; } public String getN

Promise的博客 313

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

枚举实现单例模式的原理

单例的枚举实现在《Effective Java》中有提到,因为其功能完整、使用简洁、无偿地提供了序列化机制、在面对复杂的序列化或者反射攻击时仍然可以绝对防止多次实例化等优点,单元素的枚举类型被作者认为是实现Singleton的最佳方法。 其实现非常简单,如下: publicenumSingleton{ INSTANCE; privateSingleton(){} } ...

maso88的专栏 4181

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

单例实现的几种方式

单例是一个只实例化一次的类,即类仅存在一个对象。

weixin_44958986的博客 453

Effective Java3 Item3:使用私有构造函数或枚举类型执行单例属性(内容及笔记)

单例是一个仅实例化一次的类 。单例通常表示无状态对象,比如函数(Item 24)或系统组件,它们在本质上是唯一的。将一个类设计为单例会使它的客户端测试时变得困难, 除非它实现了作为其类型的接口,否则无法用模拟实现来代替单例。 实现单例有两种常见的方法。两者都基于保持构造函数私有和导出公共静态成员以提供对唯一实例的访问。 在第一种方法中,成员是一个 final 字段: // Singleton wi...

bulibuqiqin的博客 277

03.使用私有构造方法或者枚举类型实现单例Singleton属性【Effective Java】

Character 2 Creating and Destroying objects 使用私有构造方法或者枚举类型执行单例singleton属性 文章目录问题场景方法一:公共属性 public field方法二:静态工厂方法方法三:单一元素枚举类 问题场景 单例就是一个仅实例化一次的类(item95)。单例通常代表无状态对象,比如函数(item24)或者一个本质上唯一的系统组件。让一个类成为单例...

我心中有猛虎 细嗅蔷薇 356

枚举类型的单例模式(java)

Inspired by Effective Java. Singleton模式是在编程实践中应用最广泛的几种设计模式之一。以前知道的,实现单例的方法有两种(下面的A、B)。刚刚在读《Effective Java的时候》学到一种新的更好的方法(E):单元素的枚举类型。同时通过网上资料也知道了其他两种方法(C、D)。最后一种在Java中从1.5版本开始支持,其他语言在验证后说明。 A.饿汉

z69183787的专栏 1267

枚举类

public enum SingletonDemo4 { //枚举元素本身就是单例 INSTANCE; //添加自己需要的操作 public void singletonOperation(){ } }

weixin_38441551的博客 133

理解Java枚举在单例模式的应用

5.3.9  单例和枚举 按照《高效Java 第二版》中的说法:单元素的枚举类型已经成为实现Singleton的最佳方法。 为了理解这个观点,先来了解一点相关的枚举知识,这里只是强化和总结一下枚举的一些重要观点,更多基本的枚举的使用,请参看Java编程入门资料。 Java的枚举类型实质上是功能齐全的类,因此可以有自己的属性和方法。 Java枚举类型的基本思想是通过公有的静态final域为每...

乐在其中/Leo在其中 326

枚举的语法和底层

Java enum 枚举类的编译实现 枚举类的反编译代码 枚举构造函数的写法 枚举的常见用法 枚举中的所有都可以直接调用,不用new,因为它在编译的时候被加上了static,可以认为是类加载的时候就初始化了 ...

m0_46598535的博客 171

Java基础:枚举的概念及应用

枚举 枚举是一种特殊的类,普通的类可以拥有无限多的对象,但枚举所拥有的对象是有限的。枚举同样拥有方法和属性,同样可以实现接口来实现功能,但却不能继承和拥有子类。 枚举所拥有的实例已经在自己类中定义了,并不能通过new的方式创建。在程序运行时可以直接通过类名调用枚举中的对象来调用其中的属性或者方法。在枚举中定义好的对象通常都指定了属性的值,来区分不同的对象,并且属性可以让不同的对象具有特殊的含义。 通过枚举获取到的枚举对象都是单例的,并且无法通过反射获得。 枚举中创建好的实例称为枚举的元素,外部是无法创建枚举

麦田 488

用枚举enum实现单例

用枚举enum实现单例

PacosonSWJTU的博客 1772

你知道实现单例的最佳方法是枚举吗?

从jdk1.5开始,可通过编写一个包含单个元素的枚举类型来实现单例: public enum Singleton { uniqueInstance; public void SingletonOperation() { ...... } } //然后就可以通过Singleton.uniqueInstace.SingletonOperaion来调用 这种方法在功能上与共有域方法相近,但它更加简洁,无偿地提供了序列化的机制,绝对防止多次实例化,即使在面对复杂的序列化

weixin_38802600的博客 320
上一篇: Clean Code 总结
下一篇: sourceTree移除本地账号,重新输入密码
DreamArray
博客等级 码龄10年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值