`
robindut
  • 浏览: 45299 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

3.用私有构造器或枚举类型强化SIngleton属性

 
阅读更多

Singleton指仅仅被实例化一次的类。

实现Singleton的两种方法:

1.

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

 

2.

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

  注意:可以借助AccessibleOBject.setAccessible方法,通过反射机制访问私有构造器,因此要修改构造器,让它在被要求创建第二个实例时抛出异常

对于序列化:使用以上任何一种方法,如果要实现序列号,不能单单实现序列号接口,还必须声明所有实例域都是瞬时的(transient),并且提供一个readResolve方法,否则每次反序列化的时候都会创建一个新的实例。

3.Java1.5以后还有第三种方法,使用枚举类型来实现

// Enum singleton - the preferred approach
public enum Elvis {
INSTANCE;
public void leaveTheBuilding() { ... }
}
 这种方法更简洁,无偿提供了序列号机制,防止多次实例化,单元素枚举已经成为实现SIngleton的最佳实践。

 

分享到:
评论

相关推荐

    spring.net中文手册在线版

    设置索引器属性 4.3.3.5.内联对象定义 4.3.3.6.idref节点 4.3.3.7.引用协作对象 4.3.3.8.value和ref节点的简短格式 4.3.3.9.复合属性名 4.3.4.方法注入 4.3.4.1.查询方法注入 4.3.4.2.替换任意方法 4.3.5.引用其他...

    单例模式Singleton(java源码)

    Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()方法负责检验并实例化自己,然后存储在静态成员变量中...

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.3.3. bean属性及构造器参数详解 3.3.3.1. 直接量(基本类型、Strings类型等。) 3.3.3.2. 引用其它的bean(协作者) 3.3.3.3. 内部bean 3.3.3.4. 集合 3.3.3.5. Nulls 3.3.3.6. XML-based configuration metadata ...

    Spring中文帮助文档

    7.10.3. 原型目标源 7.10.4. ThreadLocal目标源 7.11. 定义新的Advice类型 7.12. 更多资源 8. 测试 8.1. 简介 8.2. 单元测试 8.2.1. Mock对象 8.2.2. 单元测试支持类 8.3. 集成测试 8.3.1. 概览 8.3.2. ...

    Spring API

    7.10.3. 原型目标源 7.10.4. ThreadLocal目标源 7.11. 定义新的Advice类型 7.12. 更多资源 8. 测试 8.1. 简介 8.2. 单元测试 8.2.1. Mock对象 8.2.2. 单元测试支持类 8.3. 集成测试 8.3.1. 概览 8.3.2. ...

    spring chm文档

    3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...

    Spring 2.0 开发参考手册

    3.3.3. bean属性及构造器参数详解 3.3.4. 使用depends-on 3.3.5. 延迟初始化bean 3.3.6. 自动装配(autowire)协作者 3.3.7. 依赖检查 3.3.8. 方法注入 3.4. bean的作用域 3.4.1. Singleton作用域 3.4.2. ...

    单例极致 singleton C++

    3、有构造函数,构造函数有没有参数版本(DEFINE_SINGLETON_CONSTRUCT_WITH_DEFAULT); 4、有构造函数,构造函数都有参数(DEFINE_SINGLETON_CONSTRUCT); 通过宏定义巧妙实现,使用也很方便!

    singleton_code.zip

    文件名 : Singleton1.java 文件名 : Singleton2.java 文件名 : Singleton3.java 文件名 : Singleton4.java 文件名 : Singleton5.java 文件名 : Singleton6.java 文件名 : TestSingleton1.java 文件名 : ...

    运行xml文件的类AnimatePacker.h、AnimatePacker.cpp、Singleton.h

    运行xml文件的类AnimatePacker.h、AnimatePacker.cpp、Singleton.h

    Singleton两种代码实现

    单例模式,Singleton两种代码实现。一般实现方法,泛型实现方法(推荐)

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码.rar

    1.2 AbstactFactory模式 ..........................................................................................................11 1.3 Singleton模式 .....................................................

    Singleton.cs

    单例帮助类,只要继承此类就可以实现单例.

    Singleton pattern单例模式应用

    Singleton pattern单例模式应用

    javaee视频.zip

    3,输人输出3rar 4线程创建rar 5.TCP.rar 6UDP.rar 7HTMl介绍+Tomcat安装ra 8.Servleti置版流程raI 9ava开发环蟯ra 10简单程序和程图.ran 11变星和基础数据类型.ra 12运算符和表达式ra 13.流程控制rar 14数组.rar 15...

    C++完美实现Singleton模式

    C++完美实现Singleton模式

    Java 面试宝典

    19、构造器 Constructor 是否可被 override? ................................................................ 15 20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继 承具体类...

    Java 单例模式Singleton

    简单的单例模式举例Singleton 分为恶汉式 懒汉式

    Singleton.h

    Qt单例模板类。不用再每次去写单例了,按照文件描述操作步骤,就是快速实现单例。我之前同事写的,嘿嘿,我就拿过来mark~ 调不了积分,有需要请留言~

Global site tag (gtag.js) - Google Analytics