A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李井山 中级黑马   /  2012-3-30 09:31  /  2448 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个枚举只有一个对象时可以当作单例来使用,那以后都用枚举就好了。
求解枚举的单例和普通的单例的区别?

4 个回复

倒序浏览
使用枚举来实现单实例控制会更加简洁,而且无偿地提供了序列化的机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。
回复 使用道具 举报
楼上所言极是
回复 使用道具 举报
这里参考《高效Java 第二版》中的说法:单元素的枚举类型已经成为实现Singleton的最佳方法。
为了理解这个观点,先来了解一点相关的枚举知识,这里只是强化和总结一下枚举的一些重要观点,
更多基本的枚举的使用,请参看Java编程入门资料。
Java的枚举类型实质上是功能齐全的类,因此可以有自己的属性和方法。
Java枚举类型的基本思想是通过公有的静态final域为每个枚举常量导出实例的类。
从某个角度讲,枚举是单例的泛型化,本质上是单元素的枚举。
用枚举来实现单例非常简单,只需要编写一个包含单个元素的枚举类型即可。示例代码如下:
使用枚举来实现单例模式的示例  
  public enum Singleton {  

            /*定义一个枚举的元素,它就代表了Singleton的一个实例  */  
           uniqueInstance;     
           /* 示意方法,单例可以有自己的操作*/
  
     public void singletonOperation(){
  
          //功能处理    }
}
使用枚举来实现单实例控制会更加简洁,而且无偿地提供了序列化的机制,并由JVM从根本上提供保障,
绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。

再来看下目前单例模式有三种形式:

1、提供一个静态的公共属性
2、提供一个静态的公共方法
3、enum类型的(这个是针对jdk 1.5以及1.5版本以上的)



回复 使用道具 举报
我们常用的构造单例模式(Singleton)的方法,一般有2种
1 提供一个静态的公共属性
2 提供一个静态的公共方法
这2个方法,都是采用了私有的构造器来防止外部直接构造实例。 但我们可以用反射的方法,获得多个实例。从1.5开始,枚举也可以用来获得单例,而且更加可靠。同时又自动提供了一些额外的功能。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马