黑马程序员技术交流社区

标题: 枚举和单例 [打印本页]

作者: 李井山    时间: 2012-3-30 09:31
标题: 枚举和单例
一个枚举只有一个对象时可以当作单例来使用,那以后都用枚举就好了。
求解枚举的单例和普通的单例的区别?
作者: 姚伟涛    时间: 2012-3-30 10:45
使用枚举来实现单实例控制会更加简洁,而且无偿地提供了序列化的机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。
作者: 张开开    时间: 2012-3-30 10:48
楼上所言极是
作者: 肖发腾    时间: 2012-3-30 11:15
这里参考《高效Java 第二版》中的说法:单元素的枚举类型已经成为实现Singleton的最佳方法。
为了理解这个观点,先来了解一点相关的枚举知识,这里只是强化和总结一下枚举的一些重要观点,
更多基本的枚举的使用,请参看Java编程入门资料。
Java的枚举类型实质上是功能齐全的类,因此可以有自己的属性和方法。
Java枚举类型的基本思想是通过公有的静态final域为每个枚举常量导出实例的类。
从某个角度讲,枚举是单例的泛型化,本质上是单元素的枚举。
用枚举来实现单例非常简单,只需要编写一个包含单个元素的枚举类型即可。示例代码如下:
使用枚举来实现单例模式的示例  
  public enum Singleton {  

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

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

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




作者: 王运科    时间: 2012-3-30 17:18
我们常用的构造单例模式(Singleton)的方法,一般有2种
1 提供一个静态的公共属性
2 提供一个静态的公共方法
这2个方法,都是采用了私有的构造器来防止外部直接构造实例。 但我们可以用反射的方法,获得多个实例。从1.5开始,枚举也可以用来获得单例,而且更加可靠。同时又自动提供了一些额外的功能。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2