`
zhangziyangup
  • 浏览: 1091355 次
文章分类
社区版块
存档分类
最新评论

登记式单例类

 
阅读更多
登记式单例类是GoF 为了克服饿汉式单例类及懒汉式单例类均不可继承的缺点而设计的。只是它的子类实例化的方式只能是懒汉式的, 这是无法改变的。

java 代码
importjava.util.HashMap;

publicclassRegSingleton
...{
staticprivateHashMapm_registry=newHashMap();
static
...{
RegSingletonx
=newRegSingleton();
m_registry.put(x.getClass().getName(),x);
}


/***//**
*保护的默认构造子
*/

protectedRegSingleton()
...{
}


/***//**
*静态工厂方法,返还此类惟一的实例
*/

staticpublicRegSingletongetInstance(Stringname)
...{
if(name==null)
...{
name
="com.javapatterns.singleton.demos.RegSingleton";
}

if(m_registry.get(name)==null)
...{
try
...{
m_registry.put(name,Class.forName(name).newInstance());
}

catch(Exceptione)
...{
System.out.println(
"Errorhappened.");
}

}

return(RegSingleton)(m_registry.get(name));
}


}





它的子类RegSingletonChild 需要父类的帮助才能实例化。

java 代码
publicclassRegSingletonChildextendsRegSingleton
...{
publicRegSingletonChild()
...{
}


/***//**
*静态工厂方法
*/

staticpublicRegSingletonChildgetInstance()
...{
return(RegSingletonChild)RegSingleton.getInstance("com.javapatterns.singleton.demos.RegSingletonChild");
}


}



在GoF 原始的例子中,并没有getInstance() 方法,这样得到子类必须调用的getInstance(String name)方法并传入子类的名字,因此很不方便。此处在登记式单例类子类的例子里,加入了getInstance() 方法,这样做的好处是RegSingletonChild 可以通过这个方法,返还自已的实例。而这样做的缺点是,由于数据类型不同,无法在RegSingleton 提供这样一个方法。由于子类必须允许父类以构造子调用产生实例,因此,它的构造方法必须是公开的。这样一来,就等于允许了以这样方式产生实例而不在父类的登 记中。这是登记式单例类的一个缺点。

GoF 曾指出,由于父类的实例必须存在才可能有子类的实例,这在有些情况下是一个浪费。这是登记式单例类的另一个缺点。
分享到:
评论

相关推荐

    Java单例模式的全面总结

    Java单例模式,其中:单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种

    单例模式讲解说明与实例

    单例模式是 Java 中一种常见的设计模式,分为懒汉式单例、饿汉式单例和登记式单例三种。单例模式有以下特点: 1. 单例类只能有一个实例。 2. 单例类必须自己创建自己的唯一实例。 3. 单例类必须给所有其他对象提供...

    Java中单例模式详解

    主要介绍了Java中单例模式详解,单例模式包括了懒汉式单例、饿汉式单例、登记式单例三种,想要了解的朋友可以了解一下。

    设计模式—— 七 :单例模式

    单例模式的实现饿汉式懒汉式线程安全的懒汉式登记式单例模式的优缺点单例模式的优点单例模式的缺点 单例模式是23个模式中比较简单的模式,应用也非常广泛 什么是单例模式? 单例模式的定义: Ensure a class ...

    单例模式,属于创建类型的一种常用的软件设计模式 通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中

    懒汉式—线程不安全:最基础的实现方式,线程上下文单例,不需要共享给所有线程,也不需要加synchronize之类的锁,以提高性能。 懒汉式—线程安全:加上synchronize之类保证线程安全的基础上的懒汉模式,相对性能很...

    单例模式详解

    Java设计模式-单例模式详解,包含三种模式式:饿汉,懒汉,登记式,以及线程多同步的处理

    java单例模式学习示例

    java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种,下面提供了单例模式的示例

    图书馆采购、验收、编目、登记、分类工作细则.docx

    图书馆采购、验收、编目、登记、分类工作细则.docx

    特种设备使用登记(机电类).doc

    特种设备使用登记(机电类).doc

    无接触式出入登记小程序.zip

    小区为了住户的安全,也开始实行封闭式管理 用户能够通过扫码进行无接触的快速登记。 能够创建社区并且生成对应的社区二维码用于登记。 社区能在后台一键导出社区到访人员记录excel文件。

    资料:涉密计算机及移动存储介质等登记表.pdf

    涉密计算机及移动存储介质登记表管理 随着信息技术的飞速发展,计算机及移动存储介质等设备在我们生活和工作中的应用越来越广泛。然而,伴随着这些设备的普及,涉密信息的安全也变得越来越重要。为了确保涉密信息的...

    全国统一数据资产登记体系建设白皮书.pdf

    全国统一数据资产登记体系建设白皮书.pdf全国统一数据资产登记体系建设白皮书.pdf全国统一数据资产登记体系建设白皮书.pdf全国统一数据资产登记体系建设白皮书.pdf全国统一数据资产登记体系建设白皮书.pdf全国统一...

    律师事务所收案登记表、结案登记表格模板.docx

    "律师事务所收案登记表、结案登记表格模板.docx" 本资源提供了一个律师事务所收案登记表和结案登记表格模板,用于记录和追踪律师事务所的案件信息。该模板包含了详细的案件信息,包括案由、当事人、委托人、对方...

    不动产登记操作规范(试行).pdf

    "不动产登记操作规范(试行)" 本规范旨在规范不动产登记行为,保护不动产权利人合法权益。根据《不动产登记暂行条例》(简称《条例》)《不动产登记暂行条例实施细则》(简称《实施细则》),制定本规范。 一、总则...

    婚姻登记预约小程序源码.zip

    婚姻登记预约小程序,本小程序包括婚姻登记中心最新动态,婚姻登记指南,婚姻登记政策法规,预约婚姻登记,后台婚姻登记名单管理,导出,核销等功能。近年来,各地婚姻登记机构出于便民的考虑,开展了婚姻登记预约,...

    放射科传染病登记本.pdf

    放射科传染病登记本 放射科传染病登记本是医疗机构用于记录和追踪放射科传染病疫情信息的登记本。该登记本是医疗机构防控传染病的重要工具,旨在确保医疗机构内的传染病防控工作顺利进行。 从标题和描述中,我们...

    Java开发门岗出入自动识别登记系统源码.zip

    Java开发门岗出入自动识别登记系统源码Java开发门岗出入自动识别登记系统源码Java开发门岗出入自动识别登记系统源码Java开发门岗出入自动识别登记系统源码Java开发门岗出入自动识别登记系统源码Java开发门岗出入自动...

    (完整版)不动产统一登记信息应用平台总体技术框架.pdf

    (完整版)不动产统一登记信息应用平台总体技术框架.pdf(完整版)不动产统一登记信息应用平台总体技术框架.pdf(完整版)不动产统一登记信息应用平台总体技术框架.pdf(完整版)不动产统一登记信息应用平台总体技术框架.pdf...

    XX县2020年度自然资源统一确权登记项目技术总结(报告模版).doc

    XX 县 2020 年度自然资源统一确权登记项目技术总结报告模板 一、概述 ------------ XX 县 2020 年度自然资源统一确权登记项目技术总结报告模板是对 XX 县 2020 年度自然资源统一确权登记项目的技术总结报告,旨在...

    ip登记管理软件自己开发的(截图版)

    网上搜索良久,居然没有找到一款可以进行ip登记的软件,一发狠,自己写了一个。辛苦许久,不希望汗水白流,拿出来给有同样需要的朋友分享。 ip登记管理软件介绍:软件基于java,b/s结构,具有ip地址登记和ip地址...

Global site tag (gtag.js) - Google Analytics