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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧阳超 黑马帝   /  2011-10-10 10:19  /  2721 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

枚举单例实现方式

5 个回复

正序浏览
单例是日常开发中经常会碰到的一种模枚举 使用式,最常见的写法如下所示:
public class Singleton {
    private Singleton() {}

    private static final class  Holder {
        static final Singleton instance = new Singleton();
    }

    pubjava 枚举 使用方法lic static Singleton getInstance() {
        return Holder.instance;
    }
}

这样写不仅达到了java 枚举类型使用单例的效果,而且还是延迟加载,至于为什么不明白的童鞋可以 google 或 百度一下。( 这称为 lazy initialization holder class 模式 )

其实使用枚举可以很容易地实现单例。


public enum Singleton {
    INSTANCE {
        public void someMethod() {
            // . . .
        }
    };

    protected abstract void someMjava 用类实现枚举ethod();
}
枚举类型 INSTANCE 单例模式的实现就是一个单例,类型为 Singleton。

注:双检查锁只有在 jdk 1.5 及以上版本才能达到单例的效果的。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
枚举的功能就是限制对象的产生范围,枚举类规定了产生枚举对象的个数,这些对象就是枚举中的元素。枚举类的构造方法必须是私有的,因为只有构造方法是私有的才可以保证在类的外部不能够再创建枚举类的对象了。枚举也是一个特殊的类。
如果枚举中只有一个元素,那么就可以使用单例设计模式了,因为单例就是限定类只能产生一个对象,且构造方法是私有的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
本帖最后由 庞金梁 于 2011-10-10 13:16 编辑

单例是日常开发中经常会碰到的一种模式
枚举单例实现:
public enum  TrafficLam{  
     RED{  
        public TrafficLamp nextLights() {  
            // . . .  
        }  
    };  
  
    public abstract TrafficLamp nextLights();  
}
回复 使用道具 举报
public enum Singleton{   red    }     表示只能创建一个枚举对象—red,这就是枚举实现单例了

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
。。每个枚举对象,就是一个单例

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马