完美单身

我不时遇到一些Java程序员,他们不确定他们应该如何正确实现Singleton模式。 (如果您不知道什么是Singleton,请尝试Wikipedia: Singleton模式 )。

我并不是在谈论在线程环境中的正确实现。 但是,使用最常见的实现,您可以在Internet上找到所需的内容,从而可以轻松创建任意多个单例。

试想一下,您有以下常见的单例实现:

public final class NonSafeSingleton implements Serializable {private static final NonSafeSingleton INSTANCE = new NonSafeSingleton();private NonSafeSingleton() {}public static NonSafeSingleton getInstance() {return INSTANCE;}
}

现在专注于可序列化单词。 再想一秒钟…是的,您是对的。 如果您通过RMI发送这些东西,您将获得第二实例。 甚至需要执行一些内存序列化,反序列化和kaboom操作! 您刚刚取消了一般的Singleton合同。 那不太好。 但是如何解决呢? 通常,我使用两种方法:

  1. 困难的方式(或者您使用1.4或更旧的Java)
    您需要在Singleton类中实现readResolve方法。 这个小东西用来覆盖已创建的序列化机制。 您返回的内容将用于代替序列化产生的数据(有关详细信息,请参见: Serializable Javadoc )。 只需在此处返回您的实例:
    ...protected Object readResolve() throws ObjectStreamException {return INSTANCE;}
    ...
  2. 简单方法(是的,我使用的是1.5或更高版本)
    将您的单例类更改为枚举,并删除私有构造函数和getInstance方法。 是的,就是这么简单。 然后,您可以免费获得它。
    public enum SafeSingleton implements Serializable {INSTANCE;
    }

在实施下一个Singleton时,请记住这一点。 如果大量使用RMI,可以使您的生活更轻松。

参考:来自我们的JCG合作伙伴 Marek Piechut的《完美单身汉》,在《 发展世界》中 。

相关文章 :
  • Java中可怕的双重检查锁定成语
  • Java Secret:使用枚举构建状态机
  • 依赖注入–手动方式
  • Java泛型快速教程
  • JVM如何处理锁

翻译自: https://www.javacodegeeks.com/2011/08/perfect-singleton.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/374767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 我写的代码思路是从开始元素找0,找到了就将这个0后面的元素向前移一位 class Solution {public void moveZeroes(int[] nums) {int n nums.length;…

Doclava:来自Google的自定义Javadoc Doclet

Doclava是Google的自定义Javadoc Doclet,由Google Guice使用(请参阅稍冷的 Javadocs )。 Doclava使用JSilver作为其模板引擎,这是Clearsilver的纯Java实现。 我个人喜欢联合文档的想法,它允许文档在打开的项目上相互链…

linux cat显示若干行

【一】从第3000行开始,显示1000行。即显示3000~3999行 cat filename | tail -n 3000 | head -n 1000 【二】显示1000行到3000行 cat filename| head -n 3000 | tail -n 1000 *注意两种方法的顺序 分解: tail -n 1000:显示最后1000行 tail -n …

【Stackoverflow好问题】java在,如何推断阵列Array是否包括指定的值

问题java中,怎样推断数组Array是否包括指定的值精华回答1.Arrays.asList(...).contains(...) 2.使用 Apache Commons Lang包中的ArrayUtils.containsString[] fieldsToInclude { "id", "name", "location" };if ( ArrayUtils.contai…

力扣移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…

在域驱动设计中使用状态模式

域驱动设计(DDD)是一种软件开发方法,其中,通过将实现与核心业务概念的不断发展的模型相连接,可以解决问题的复杂性。 该术语是由Eric Evans创造的,并且有一个DDD专用站点可以促进其使用。 根据其定义&#…

使用selenium进行密码破解(绕过账号密码JS加密)

经常碰到网站,账号密码通过js加密后进行提交。通过burp拦截抓到的账号密码是加密后的,所以无法通过burp instruder进行破解。只能模拟浏览器填写表单并点击登录按钮进行破解。于是想到了自动化web测试工具selenium,代码如下,测试效…

力扣删除排序数组中的重复项

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 我没注意到“有序”这一条…

POJ1789-Truck History .

题目链接:http://poj.org/problem?id1789 题目的大概意思就是给你n个字符串。每个字符串只有7的长度。然后分别给这些字符串编号。不同编号之间的距离就是他们有多少个不同的字母。(同一个位置字母不相同也算)然后一个编号只能由另一个派生…

Java Fork / Join进行并行编程

最近几年,计算机处理器领域发生了范式转变。 多年来,处理器制造商一直在提高时钟频率,因此开发人员享受到这样的事实,即他们的单线程软件执行得更快,而无需他们付出任何努力。 现在,处理器制造商青睐多核芯…

arm-elf-gcc交叉编译器的使用教程

arm-elf-gcc交叉编译器的使用教程 一开始需要安装arm-elf-gcc,但是这是一个32位的程序,我是安装了64位的系统,据说安装ia32.libs依赖库能运行这个,但是看到博客上面前人安装完了系统图标少了一半,然后就怕了。经过了翻…

力扣删除排序数组中的重复项 II

给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 最多出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。 思路: 双指针…

2 android学习资料

http://blog.csdn.net/lmj623565791 http://blog.csdn.net/harvic880925/article/details/50995268转载于:https://www.cnblogs.com/YyuTtian/p/5440930.html

建立自己的GWT Spring Maven原型

大家好, 在观看Justin撰写的有关Spring和GWT的非常有趣的文章时,我认为展示如何构建自己的自定义Maven原型非常有用。我们将展示的原型基于Justin的上一个项目,并包括各种技术,例如Spring , GWT , AspectJ…

C# 连接Oracle数据库异常总结

这2天因为工作需要连接Oracle数据库,中间发生了很多问题 一、使用OleDbConnection连接数据库 ------------------ ProviderOraOLEDB.Oracle.1;User IDsajet;Passwordtech;Data Source(DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 192.168.66.225)(…

力扣颜色分类

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 思路:将红色和蓝色…

Cassandra,MongoDB,CouchDB,Redis,Riak,HBase比较

克里斯托夫科瓦奇(KristfKovcs)对六个最受欢迎的“ NoSQL ”数据库实现进行了非常有趣的简短比较 。 除了Kristf的工作之外,我还想提供一些链接,我相信这些链接将对有兴趣关注“ NoSQL ”社区的所有人员提供帮助: No…

程序员需要谨记的九大安全编码规则

历史已经证明,软件设计的缺陷一直是导致其漏洞被利用的最主要的罪魁祸首。安全专家发现,多数漏洞源自常见软件中相对有限的一些漏洞。软件开发者和设计者应当严格检查程序中的各种错误,尽量在软件部署之前就减少或清除其中的漏洞。 下面列举的…

HDU 2897

Problem Description当日遇到月,于是有了明。当我遇到了你,便成了侣。那天,日月相会,我见到了你。而且,大地失去了光辉,你我是否成侣?这注定是个凄美的故事。(以上是废话&#xff09…

力扣合并两个有序数组

题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终&#…