iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中Singleton的实现方式有哪些
  • 503
分享到

Java中Singleton的实现方式有哪些

2023-06-06 11:06:02 503人浏览 薄情痞子
摘要

本篇文章给大家分享的是有关Java中Singleton的实现方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;

本篇文章给大家分享的是有关Java中Singleton的实现方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

1、公有静态成员为一个final域

//Singleton with public final field public class Elvis {  public static final Elvis INSTANCE = new Elvis();  pritvate Elvis() { ... }  public void leaveTheBuilding() { ... }}

在这个类中,我们仅仅拥有一个私有的构造器,它也只在初始化final域时被调用一次。由于缺少可以使用的构造器,后续的程序无法再创建 Elvis 对象。这保证了在该Java程序的整个生命周期中, Elvis 对象有且只有一个存在。

但需要注意的是,一些高权限的客户端可以借助 AccessibleObject.setAccessible 方法通过反射机制调用私有的构造器。为了避免这样的可能的攻击,可以修改构造器,让它在被要求创建第二个实例的时候抛出异常。

公有域方法的主要优势在于,api很清楚地表明了这个类是一个 Singleton ,毕竟这是一个公有的静态属性。另外,这个方法要更加简单。

2、公有静态成员为一个静态工厂方法

//Singleton with static factorypublic class Elvis {  private static final Elvis INSTANCE = new Elvis();  pritvate Elvis() { ... }  public static Elvis getInstance(){ return INSTANCE; } public void leaveTheBuilding(){ ... }}

显然,无论怎样调用 getInstance 方法,返回的都是同一个对象的引用。注意上面提示的反射攻击问题依然存在。

静态工厂方法有三大优势

  • 第一,它提供了更多的灵活性,在不改变API的前提下,我们可以轻易地自由调整这个类是否是Singleton。工厂方法返回该类的唯一实例,但它很容易修改成别的样子,例如为每个调用该方法的线程提供唯一实例。

  • 第二,如果程序需要,我们可以编写一个泛型 Singleton 工厂。

  • 第三,我们可以通过方法引用作为提供者,比如 Elvis::instance 就是一个 Supplier< Elvis >

(注:方法引用是Java8的一个新特性)

除非我们需要上述的其中一种优势,我们还是应该选择更简单易懂的使用公有域的方法。

3、将利用上述方法实现的Singleton类变为可序列化的

使用上述两种方法实现的 Singleton ,要把他们变成可序列化的,不能仅仅在声明中加上 implements Serializable 。为了维护并保证 Singleton ,我们必须生命所有实例域都是瞬时的,并提供一个 readResolve 方法。否则在我们每次序列化时都会创建一个新的实例。为了防止这种情况,我们要在 Elvis 类中加入如下这样的 readResolve 方法。

//readResolve method to preserve singleton property  private Object readResolve(){ //Return the one true Elvis and let the garbage collector take care of the Elvis impersonator return INSTANCE; }

三、Singleton实现 —— 声明包含单个元素的枚举类型

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

这种方法在功能上与公有域方法相似,但更加简洁,无偿地提供了序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。 虽然这种方法还没有广泛采用,但是单元素的枚举类型经常成为实现 Singleton 的最佳方法。 注意,如果 Singleton 必须扩展一个超类,而不是扩展 Enum 的时候,则不宜使用这个方法(虽然可以声明枚举去实现接口)。

以上就是Java中Singleton的实现方式有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: Java中Singleton的实现方式有哪些

本文链接: https://www.lsjlt.com/news/246643.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中Singleton的实现方式有哪些
    本篇文章给大家分享的是有关Java中Singleton的实现方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java可以用来干什么Java主要应用于:1. web开发;...
    99+
    2023-06-06
  • Singleton模式有哪些优点
    今天小编给大家分享一下Singleton模式有哪些优点的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Singleton模式有...
    99+
    2023-06-19
  • java实现锁的方式有哪些
    Java实现锁的方式有以下几种: synchronized关键字:使用synchronized关键字可以在方法或者代码块上加锁,...
    99+
    2023-10-24
    java
  • java实现继承的方式有哪些
    在Java中,实现继承的方式有以下几种:1. 类继承(单继承):一个子类只能继承一个父类。例如:class SubClass ext...
    99+
    2023-10-18
    java
  • java接口的实现方式有哪些
    java中实现接口的方式有:1.使用implements关键字实现;2.使用匿名内部类实现;3.使用interface实现;java中实现接口的方式有以下几种使用implements关键字实现public interface Com{}pu...
    99+
    2024-04-02
  • java签名实现的方式有哪些
    Java签名实现的方式有以下几种: 数字签名:使用非对称加密算法,如RSA或DSA,生成一个数字签名,用于验证数据的完整性和认证发...
    99+
    2023-10-26
    java
  • java实现并发的方式有哪些
    Java中实现并发的方式有以下几种:1. 多线程:通过创建多个线程来实现并发操作。可以使用Thread类或者实现Runnable接口...
    99+
    2023-10-11
    java
  • java多态的实现方式有哪些
    Java中多态的实现方式有以下几种:1. 继承:子类继承父类,并重写父类的方法,通过父类引用指向子类对象实现多态。2. 接口:定义一...
    99+
    2023-08-16
    java
  • java实现缓存的方式有哪些
    Java实现缓存的方式有以下几种:1. 基于HashMap的简单缓存:可以使用HashMap来存储缓存数据,其中键为缓存的键,值为缓...
    99+
    2023-08-28
    java
  • Java中定时任务的实现方式有哪些
    本篇内容主要讲解“Java中定时任务的实现方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中定时任务的实现方式有哪些”吧!1、线程等待实现先从最原始最简单的方式来讲解。可以先创建...
    99+
    2023-06-25
  • Python实现Singleton模式的
    使用python实现设计模式中的单例模式。单例模式是一种比较常用的设计模式,其实现和使用场景判定都是相对容易的。本文将简要介绍一下python中实现单例模式的几种常见方式和原理。一方面可以加深对python的理解,另一方面可以更加深入的了...
    99+
    2023-01-30
    模式 Python Singleton
  • Java实现AOP代理的方式有哪些
    这篇文章主要介绍了Java实现AOP代理的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java实现AOP代理的方式有哪些文章都会有所收获,下面我们一起来看看吧。AOP是一种设计思想,是软件设计领域中...
    99+
    2023-07-02
  • java深拷贝的实现方式有哪些
    在Java中,深拷贝可以通过以下几种方式来实现:1. 实现Cloneable接口并重写clone()方法:Cloneable接口标记...
    99+
    2023-08-08
    java
  • java零拷贝的实现方式有哪些
    Java 的零拷贝(Zero-copy)是指在数据传输过程中,避免将数据从一个缓冲区复制到另一个缓冲区,从而提高数据传输的效率。Ja...
    99+
    2023-09-23
    java
  • Java实现多线程的方式有哪些
    本篇内容主要讲解“Java实现多线程的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java实现多线程的方式有哪些”吧!Java多线程实现方式主要有四种:继承Thread类、实现Run...
    99+
    2023-07-02
  • java多线程实现的方式有哪些
    Java多线程实现的方式有以下几种:1. 继承Thread类:创建一个类继承Thread类,并重写run()方法,在run()方法中...
    99+
    2023-09-15
    java
  • java实现定时器的方式有哪些
    Java中实现定时器的方式有以下几种:1. java.util.Timer类和java.util.TimerTask类:Timer类...
    99+
    2023-08-25
    java
  • JAVA实现Base64编码的方式有哪些
    本篇内容主要讲解“JAVA实现Base64编码的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA实现Base64编码的方式有哪些”吧!定义: 二进制文件可视化Base64 是一种...
    99+
    2023-07-02
  • java悲观锁的实现方式有哪些
    在Java中,悲观锁的实现方式有以下几种:1. synchronized关键字:使用synchronized关键字对共享资源进行加锁...
    99+
    2023-08-16
    java
  • Java中Map实现线程安全的方式有哪些
    这篇“Java中Map实现线程安全的方式有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java中Map实现线程安全的方...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作