`

JDP-[单例模式]-思路梳理

 
阅读更多

单例模式是属于比较常用的一例,一个类(class)在内存中只有一个实例。
常用方式如下:
第一种(饿汉式):

public class Singleton 
{
  private Singleton(){}
  private static Singleton instance = new Singleton();
  public static Singleton getInstance() 
    {
    return instance;   
   }
}

 

第二种方式:(懒汉式)

public class Singleton {
  private static Singleton instance = null;
  public static synchronized Singleton getInstance() {
  //这个方法比上面有所改进,不用每次都进行生成对象,只是第一次使用时生成实例,提高了效率!
 if (instance==null)
    instance=new Singleton();
  return instance;   }
}

比较安全的使用方式是第一种private static Singleton instance = new Singleton();
单例的陷井:
多个虚拟机
当单例类被运行在多个虚拟机下的时候,在每个虚拟机都可以创建一个实例对歇脚。像使用了EJB,JINI,RMI技术的分布式系统的时候,
因为中间件屏蔽了分布式系统在物理上的差异,这个时候想知道在哪个虚拟机下运行着哪个单例对象很困难。因此在使用分布式技术时,应
该避免使用
多个类加载器
当存在多个类加载器,即使它们加载的相同包名,相同类名甚至每个字节都完全相同的类,也会被区别对待的。因为不同的类加载器会使用
不同的命名空间来区分同一个类,因此,单例类在多加载器的环境下会产生多个单例对象。也许你认为出现多个类加载器的情况不多,其实
多个类加载器存在的情况不少,在很多J2EE服务器上允许存在多个SERVLET引擎,而每个引擎是采用不同的类加载器的,浏览器的APPLET
小程序通过网络加载类的时候,由于安全因素,采用的是特殊类加载器,等等。
在这种情况,由状态的单例模式也会给系统带来隐患。因此除非系统由协调机制,在一般情况下不要使用存在状态的单例模式。
错误的同步处理
在使用上面介绍的懒汉式单模式的时候,同步得理恰当与否也是很,不然要能达不到想要的单例效果,还可能
引发死锁等。因此在使用懒汉式单例模式时一定要对同步有所了解,不过使用饿汉式单例模式就可以避免这个
问题。
子类破坏了对象控制
如果构造器变得不再私有,就有可能失去对对象的控制
串行化(可序列化)
为了使一个单例类变成可串行化的,仅仅在声明中添加“implements Serializable"是不够的,因为一个串行化
的对象在每次反串行化的时候,都会创建一个新的对象,而不仅仅是一个对原有对象的引用,为了防止这种情
况,可以在单例类中加入readResolve方法

public final class Singleton implements Serializable{
private Singleton () { }
private static final Singleton INSTANCE = new Singleton ();
public static Singleton getInstance() { return INSTANCE; }
private Object readResolve() throws ObjectStreamException {
return INSTANCE;
}
}

 对象的反串行化并不仅局限于上述方式,还存在基于 XML模式的对象串行化方式,这种方式也存在上述的问
题,所以在使用的时候还要格外小心。 

 

分享到:
评论

相关推荐

    得宝 迪普乐DP-F850 DP-F650 DP-F620 DP-F550 DP-F520 制版印刷一体机 维修手册

    ### 得宝迪普乐DP-F系列制版...通过以上知识点的梳理,我们可以了解到得宝迪普乐DP-F系列制版印刷一体机维修手册涵盖了从安全操作到具体维修步骤等多方面的内容。这对于确保设备的安全运行和延长使用寿命具有重要意义。

    明华汉澳DP-R123-U-SB2(X3-HZ) RD及DP串口系列读写器演示程序及开发包.zip

    适用于RD-EB、RD-ET、RD-EZ、RD-EB-MX、RD-ET-MX、RD-EZ-MX、KRD-EB、KRD-ET、KRD-EZ、KRD-EB-MX、KRD-ET-MX、KRD-EZ-MX 、SRD-R100、Q3-R100、Q3-R101、Q3-R102、DP-R103、DP-R 113、DP-R123、DP-R133、DP-R143、...

    DP-301U网络打印服务器驱动

    《DP-301U网络打印服务器驱动:深入解析与应用指南》 在现代办公环境中,网络打印服务器扮演着至关重要的角色,它使得多台计算机能够通过网络共享一台打印机,大大提高了工作效率。D-LINK公司的DP-301U网络打印...

    DP-302打印服务器1.02版

    DP-302的USB接口打印服务器为用户提供在局域网内分享他们的打印机的服务,并对于那些DP-302兼容的打印机产品提供在线打印服务。DP-302打印服务器允许多个用户直接从电脑上发送文件传输到打印机上进行打印工作。在...

    天际航图像快速建模系统DP-Modeler2.3

    《天际航图像快速建模系统DP-Modeler2.3》是一款专为3D建模和视觉效果设计的专业软件,结合了先进的图像处理技术和高效的工作流程,旨在为用户提供便捷、精准的三维模型构建能力。DP-Modeler是天际航公司的明星产品...

    D-Link DP-302 打印服务器驱动

    【D-Link DP-302 打印服务器驱动】是一款专为D-Link公司的DP-302打印服务器设计的驱动程序。该驱动程序在IT领域中扮演着至关重要的角色,因为它允许计算机与DP-302打印服务器之间进行有效的通信,确保打印机能够正确...

    dp-8016p-pk 32位驱动

    《松下DP-8016P/PK 32位驱动详解及安装指南》 在信息技术领域,打印机是日常办公不可或缺的设备之一。松下DP-8016P和DP-8020P作为高效能的商务打印机,为用户提供了高质量的文档输出服务。然而,为了让这些设备正常...

    DP-301U_UTILITY_PSADMIN_1.00

    标题 "DP-301U_UTILITY_PSADMIN_1.00" 提及的是D-Link公司的DP-301U打印共享器的特定版本工具,即PSAdmin 1.00。这款设备允许多台计算机通过网络共享一台打印机,提高了办公效率。DP-301U是一个实用的解决方案,尤其...

    DP-600微软MCP ET.pdf

    根据提供的文件信息,我们可以推断出这是一份与微软MCP认证相关的学习资料,主要针对的是DP-600考试。下面将详细解读文件中的关键信息,并基于这些信息提炼出有关MCP认证的重要知识点。 ### 标题:“DP-600微软MCP ...

    DP-504 DP-508步进驱动器用户手册.pdf

    根据提供的文档内容,DP-504和DP-508步进驱动器是信捷科技电子有限公司生产的产品,它们主要具备以下知识点: 产品概述: DP-504/DP-508步进驱动器是一类细分型步进驱动器,适用于各种中小型自动化设备和仪器。这些...

    DP-301U 共享USB打印服务器配置

    ### DP-301U 共享USB打印服务器配置知识点详解 #### 1. DP-301U产品概述 **DP-301U**是一款由D-Link推出的紧凑型打印服务器,专为实现网络共享打印而设计。它通过高速USB端口连接USB打印机,使得局域网内的任何...

    DP-Modeler操作步骤.pdf.zip

    DP-Modeler是一款强大的数据处理和建模工具,主要用于地理信息系统(GIS)中的3D建模和分析。本文将深入探讨DP-Modeler的操作步骤、关键功能及其在Osgb、GIS、obj数据格式间的转换。 一、DP-Modeler操作步骤 1. **...

    Panasonic压力传感器DP-100.pdf

    松下公司的DP-100是一款压力传感器,该传感器具有多种功能和特性,适用于不同的工业应用环境。在详细讨论这些知识点之前,需要对一些相关概念和技术术语进行解释和阐述,以便更好地理解文档中提到的DP-100传感器的...

    DP-DP-Koppler_Rel3_www.44dpdp.com_www.44dpdp.con_EC1-DEB-DPM_GSD

    标题"DP-DP-Koppler_Rel3_www.44dpdp.com_www.44dpdp.con_EC1-DEB-DPM_GSD"中提到的"DP-DP-Koppler"可能指的是一个特定的软件或系统开发项目,其中"DP"可能是项目代号或者代表“Data Processing”的缩写,而"Koppler...

    D-Link DP-302 V1.03 打印服务器固件

    D-Link DP-302 打印服务器固件,最新V1.03版本。也是最终版本,支持更多打印机。

    D-link DP-302打印服务器software

    **D-Link DP-302 打印服务器软件详解** D-Link DP-302打印服务器是一款专为网络打印环境设计的设备,它能够将传统的并行或串行打印机转换为网络打印机,使多台电脑能够在同一网络环境下共享打印资源。这款设备的...

    DP-means k - means聚类算法的比较

    标题中的"DP-means"和"k-means"都是在数据挖掘和机器学习领域广泛应用的聚类算法。这两种方法主要用于无监督学习,即在没有预先指定类别的情况下,将数据集中的对象自动分组到不同的类别中。现在,我们将深入探讨这...

    DP-ModelerV2.3 用户手册

    ### DP-ModelerV2.3 用户手册知识点详解 #### 1. 系统简介 **1.1 产品概述** DP-ModelerV2.3是一款由武汉天际航信息科技股份有限公司研发的图像快速建模系统。该系统主要用于通过二维图像数据构建高质量的三维...

    DP-851绝版资料

    DP-851单板计算机作为工业自动化和数据处理的先驱,在其时代扮演了重要的角色。时至今日,随着技术的飞速发展,DP-851虽然已经退出了主流应用市场,但它的历史地位和影响仍然不容忽视。对于那些致力于研究计算机历史...

    DP-100文档.pdf

    DP-100文档 DP-100文档是Microsoft Azure认证考试中的一个重要组件,旨在考察考生的数据科学解决方案设计和实现能力。本文档涵盖了DP-100考试的部分内容,涉及到数据科学解决方案的设计、实现和部署等方面。 从...

Global site tag (gtag.js) - Google Analytics